Курсовая работа по дисциплине: «Информатика»




Скачать 49.26 Kb.
PDF просмотр
НазваниеКурсовая работа по дисциплине: «Информатика»
студент: Константинов Алексей Сергеевич
Дата конвертации03.10.2012
Размер49.26 Kb.
ТипКурсовая
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра: «Прикладная математика и информатика»
КУРСОВАЯ РАБОТА
по дисциплине: «Информатика»
Работу выполнил студент: Константинов Алексей Сергеевич
Шифр 210201 Группа 11-Р Факультет ФЭиП
Специальность: «Проектирование и технология радиоэлектронных средств» 
Курсовая защищена с оценкой __________________________________________
Руководитель ______________________                                                Абашин В.Г.
                                         подпись
Орел 2008

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра: «Прикладная математика и информатика»
Задания на курсовую работу
Работу выполнил студент: Константинов Алексей Сергеевич
Шифр 210201 Группа 11-Р Факультет ФЭиП
Специальность «Проектирование и технология радиоэлектронных средств»
Задание
1. Реферат на тему «Программа перевода чисел в различные системы 
счисления».
2. Разработать   алгоритм   и   написать   программу.   Составьте   программу   для 
проверки   навыков   учащихся   по   переводу   чисел   в   системы   счисления   с 
различным основанием. Входными данными программы является результат 
решения учащимся задания, выводимого на экран. Указания: вычисления, 
связанные   с   переводом   чисел,   выполните   в   виде   функции;   проверку 
вводимого пользователем результата выполните в виде функции.
Руководитель__________________                                            Абашин В.Г.
                                      подпись
Задание принял к исполнению «_____»                             ______________2008 г.
Подпись студента ________________

           Задание №1
Реферат
Программа, которая осуществляет перевод чисел из одной системы 
счисления в другую. Диапазон оснований систем счисления составляет 2…20 
(включая 2 и 20). Основное назначение программы – проверка навыков учащихся 
по переводу  чисел в системы счисления с различным основанием. Входными 
данными программы является результат решения учащимся задания, 
выводимогона экран.
Далее представлено подробное описание исходного кода программы.
#include
#include
#include
#include
#include
#include
Эти строки являются директивами для препроцессора языка Си. С их помощью 
перед   процессом   компиляции   осуществляется   включение   содержимого 
библиотечных файлов, имена которых заключены в скобках <>, в исходный код 
программы.   Эти   заголовочные   файлы   содержат   информацию   о   прототипах   и 
объявлениях стандартных библиотечных функций.
Далее представлены прототипы используемых в программе функций.
void perevod(int, int, int, char [], int);
int kolvo(double, int, int);
void rav(char []);
Функция  perevod  получает четыре аргумента целочисленного типа (int) и один 
аргумент   символьного   типа   (char),   ничего   не   возвращает.   Функция  kolvo 

получает   два   аргумента   целочисленного   типа   (int)   и   один   аргумент   типа   с 
плавающей   точкой   двойной   точности   (double),   возвращает   значение 
целочисленного   типа   (int).   Функция  rav  получает   один   аргумент   символьного 
типа (char), ничего не возвращает. Определения трех этих функций приведены 
ниже.
Определение функции main.
main(int argc,char *argv[])
В   данной   программе   имеется   поддержка   запуска   с   параметром   –v  для   вывода 
версии программы на экран. Поэтому список аргументов функции main содержит 
переменную  argc  целочисленного   типа   (int)   (она   содержит   количество 
аргументов)   и   указатель  *argv[]  на   символьный   тип   (char)   (содержит   сами 
аргументы как строки, одним из которых является имя исполняемого файла).
Следующий оператор условного перехода используется для обеспечения 
поддержки запуска программы с параметром.
if ((argv[1] != NULL) && (!(strcmp("-v", argv[1]))))
{
printf("\n\n***Version 0.01 beta***\n\n");
}
else
{
Оператор  if  проверяет   истинность   выражения,   стоящего   в   скобках.   Это 
выражение   состоит   из   двух   сложных   операндов,   с   которыми   осуществляется 
логическая   операция  &&  («и»,   «конъюнкция»).   Первый   операнд   считается 
истинным, если второй элемент символьного массива  argv  не равен  NULL, т.е. 
содержит   какой-нибудь   параметр.   Второй   операнд   считается   истинным,   если 
значение, возвращяемое функцией strcmp (функция из стандартной библиотеки), 

равно  0.   Функция  strcmp  осуществляет   сравнение   строк,   передаваемых   в 
параметрах, и если строка, содержащаяся во втором элементе массива argv, будет 
равна   строке   “-v”,   то   функция   возвращает   значение  0.   Иначе   говоря,   если 
программа   будет   запущена   с   параметром   –v,   то   условие   оператора  if  будет 
истинно, выполнение продолжится с оператора, следующего за оператором if, т.е. 
printf,   который   выведет   на   экран   версию   программы.   После   этого   программа 
завершит свое выполнение. В случае, когда условие ложно, программа продолжит 
выполнение в обычном режиме.
В следующих строках содержатся объявления.
           int num, osn, osn1, drob, i, k = 1, x;
double number;
char temp[36];
Переменные  num,  osn,  osn1,  drob,  i,  k,  x  объявляются   переменными 
целочисленного   типа   (int),  k  инициализируется   значением  1;  number  – 
переменной   типа   с   плавающей   точкой   (double).   Объявляется   массив  temp 
символьного типа (char) с 36 элементами.
В программе используется рандомизированное генерирование 
псевдослучайных чисел (генерируются только десятичные числа). По условию 
задачи перевод осуществляется над числами с тремя знаками после десятичной 
точки.
srand(time(NULL));
num = 1 + rand();
do
osn = 2 + rand() % 19;
while (osn == 10);

osn1 = osn;
drob = 111 + rand() % 889;
number = (double) num;
Функция srand получает в качестве аргумента целое без знака (в данном случае 
значение,   которое   возвращает   функция  time,   а   именно   текущее   время   дня   в 
секундах),   которое   позволяет   получать   от   функции  rand  различные 
последовательности псевдослучайных чисел при каждом исполнении программы. 
Переменной num присваивается сгенерированное число, которое далее считается 
целой   частью   переводимого   числа   (чтобы   значение  num  не   было   равно  0,   к 
генерированному   функцией  rand  числу   прибавляется  1).   Цикл  do   while 
обеспечивает генерирование основания osn для первого перевода, не равного 10
Основание   генерируется   в   диапазоне   2…20.   Затем   значение   переменной  osn 
присваивается   переменной  osn1  (смысл   этой   операции   будет   раскрыт   позже). 
Переменной  drob  присваивается   значение   в   диапазоне   111…999.   Переменной 
number  присваивается значение переменной  num, тип которого преобразован в 
double (для избежания неточностей в вычислениях).
Переменная k используется для подсчета количества символов, 
необходимых для записи числа после первого перевода в систему счисления с 
основанием osn.
k = kolvo(number, osn, k) + 5;
В этой строке переменной k присваивается результат выполнения функции kolvo 
плюс  5.   Аргументы   функции   указаны   в   скобках.   Функция  kolvo  возвращает 
значение целочисленного типа (int). Прибавление числа  5  объясняется тем, что 
функции  kolvo  подсчитывает   количество   символов,   необходимых   для   записи 
только   целой   части   переводимого   числа,   а   еще   пять   символов   требуется   для 
записи трех знаков после десятичной точки, самого символа ‘.’, а также символа 
конца строки ‘\0’.

Далее происходит вызов функции perevod:
perevod(num, osn, drob, temp, k);
В функцию передаются целая  num  и дробная  drob  части переводимого числа, 
основание для первого перевода osn, массив temp для записи результата перевода 
и количество необходимых символов k для записи переведенного числа. Функция 
ничего не возвращает.
Следующий блок производит генерирование нового основания для второго 
перевода и печать задания на экране.
printf("Perevedite chislo "%s" s osnovaniem %d", temp, osn);
do
osn = 2 + rand() % 19;
while (osn == osn1 || osn == 10);
printf("\nv sistemu schislenia, osnovanie kotoroi %d.\n
\nVvedite rezultat:\n\n", osn);
Переменная  osn1  используется   в   составном   выражении,   которое   является 
условием продолжения цикла  do while. В этом цикле генерируется основание в 
диапазоне 2…20, но не равное  10  и не равное основанию, использованному для 
первого перевода.
Далее производится подсчет необходимого количества символов, но уже 
для второго переводимого числа.
k = kolvo(number, osn, k) + 5;
char result[k];
perevod(num, osn, drob, temp, k);

Функция  kolvo  возвращает   значение   целочисленного   типа   (int);   объявление 
массива  result  символьного   типа   (char)   с   количеством   элементов,   равным  k
который   используется   для   записи   результата,   введенного   пользователем   с 
клавиатуры;   вызов   функции  perevod:   в   функцию   передаются   целая  num  и 
дробная  drob  части  переводимого  числа, основание для  второго  перевода  osn
массив temp для записи результата перевода и количество необходимых символов 
k для записи переведенного числа, функция perevod ничего не возвращает.
Следующий блок осуществляет запрос результата у пользователя и его 
проверку на соответствие результату, полученному в функции perevod.
do
{
scanf("%s", result);
rav(result);
if (((strncmp(temp, result,k))<0) || ((strncmp(temp, result,k))>0))
printf("\nOshibka! Poprobuite snova.\nVvedite rezultat: ");
else
{
printf("\nRIGHT !\n\n");
break;
}
} while (1);
return 0;
}
Запрос и проверка происходят в цикле  do while, условие продолжения которого 
всегда истинно (т.е. цикл бесконечен, выход из цикла возможен только при вводе 

пользователем правильного результата). Результат пользователя записывается в 
массив result. Далее происходит вызов функции rav, которой передается массив 
result, в которой производится проверка формата введенного результата. Далее 
происходит   проверка   результата   пользователя   и   результата   перевода   функции 
perevod  с   помощью   стандартной   библиотечной   функции  strncmp,   которая 
принимает две строки и переменную  k  (k  фактически является  длиной строки 
результата). Если строки не равны, то выводится сообщение об ошибке и просьба 
произвести ввод результата еще раз. Если строки равны, то выводится сообщение 
о   том,  что   введенный   пользователем   результат   правильный.  Затем   происходит 
выход из цикла и завершение программы.
Объявление функции kolvo.
int kolvo(double number, int osn, int k)
{
k = 1;
while (number >= osn) {
number = number / osn;
k++;
}
return k;
}
Функция   осуществляет   в   цикле  while  целочисленное   деление   целой   части 
переводимого числа на основание системы счисления, в которую надо перевести 
это число, и подсчет количества символов  k. Цикл выполняется, пока значение 
переменной  number  больше   или   равно   значению   переменной  osn.   Функция 
возвращает значение целочисленного типа (int).
Объявление функции perevod.
void perevod(int num, int osn, int drob, char temp[], int k)

{
int mod, i, tc, m;
char symbols[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
double td1 = (double) drob, td2;
for (i = 0; num != 0; i++)
{
mod = num;
num = num / osn;
mod = mod % osn;
temp[k-6-i] = symbols[mod];
}
temp[k-5] = '.';
for (i = -4; i <= -2; i++)
{
td2 = td1;
td1 = (td1 * osn) / 1000;
tc = (int) (td2 * osn) / 1000;
td1 = (td1 - tc) * 1000;
temp[k+i] = symbols[tc];
}
temp[k-1] = '\0';
}
Переменные  mod,  i,  tc,  m  объявляются   переменными   целочисленного   типа. 

Объявляется   массив  symbols  с  20  элементами  и  инициализируется  символами, 
допустимыми для записи чисел в системах счисления с основаниями в диапазоне 
2…20. Объявляются  переменные  td2  и  td1  типа с  плавающей точкой  двойной 
точности.   Переменная  td1  инициализируется   значением   переменной  drob,   тип 
которого преобразован в  double. В первом цикле  for  происходит перевод целой 
части числа в систему счисления с основанием osn и сохранение в массив temp в 
порядке справа налево при помощи массива symbols. Используется программная 
реализация математического алгоритма перевода целой части числа в выбранную 
систему счисления путем деления на основание новой системы счисления  osn
Затем в массив после переведенной целой части записывается символ десятичной 
точки ‘.’. Во втором цикле for происходит перевод дробной части числа в систему 
счисления с основанием osn и сохранение в массив temp в порядке слева направо 
при   помощи   массива  symbols.   Используется   программная   реализация 
математического алгоритма перевода дробной части числа в выбранную систему 
счисления путем умножение на основание новой системы счисления osn. Затем в 
массив после переведенной дробной части записывается символ конца строки ‘\0’.
Объявление функции rav.
void rav(char stroka[36])
{
int i = 0, k = 0;
strupr(stroka); 
if (stroka[(strlen(stroka))-1]=='.')
printf("Chislo vvedeno nepravilno");
else
{
while (((stroka[i] >= '0' && stroka[i] <= '9') || stroka[i] == '.') ||
 ((stroka[i] >= 'A' && stroka[i] <= 'J') || stroka[i] == '.'))

{
if (stroka[i] == '.')
k++;
i++;
}
if (k > 1)
printf(" Tochka vvedena bolee odnogo raza \n");
else
{
if (stroka[i] != '\0')
printf("\n");
}
}
}
В данной функции осуществляется преобразование буквенных символов нижнего 
регистра (если таковые есть в записи результата) в буквенные символы верхнего 
регистра   с   помощью   стандартной   библиотечной   функции  strupr,   аргументом 
которой   является   результат   вычислений   пользователя   в   массиве  stroka.   Далее 
происходит   проверка   формата   строки   на   правильность   ввода.   Если   в   строке 
последним (не учитывая символ конца строки) символом является символ точки, 
то   выводится   сообщение   о   неправильности   введения   числа.   В   другом   случае 
проводится   посимвольная   проверка   строки   результата   на   соответствие 
допустимым символам, подсчет количества введенных точек. Функция ничего не 
возвращает.
Полный исходный код программы.
#include
#include
#include

#include
#include
#include
void perevod(int, int, int, char [], int);
int kolvo(double, int, int);
void rav(char []);
main(int argc,char *argv[])
{
if ((argv[1] != NULL) && (!(strcmp("-v", argv[1]))))
printf("\n\n***Version 0.01 beta***\n\n");
else
{
int num, osn, osn1, drob, i, k = 1, x;
double number;
char temp[36];
srand(time(NULL));
num = 1 + rand();
do
osn = 2 + rand() % 19;
while (osn == 10);
osn1 = osn;
drob = 111 + rand() % 889;
number = (double) num;

k = kolvo(number, osn, k) + 5; 
perevod(num, osn, drob, temp, k);
printf("Perevedite chislo "%s" s osnovaniem %d", temp, osn);
do
osn = 2 + rand() % 19;
while (osn == osn1 || osn == 10);
printf("\nv sistemu schislenia, osnovanie kotoroi %d.
\n\nVvedite rezultat:\n\n", osn);
k = kolvo(number, osn, k) + 5;
char result[k];
perevod(num, osn, drob, temp, k);
do
{
scanf("%s", result);
rav(result);
if (((strncmp(temp, result, k)) < 0) || ((strncmp(temp, result, k)) > 0))
printf("\nOshibka! Poprobuite snova.\nVvedite rezultat: ");
else
{
printf("\nRIGHT !\n\n");
break;
}
} while (1);

}
return 0;
}
int kolvo(double number, int osn, int k)
{
k = 1;
while (number >= osn)
{
number = number / osn;
k++;
}
return k;
}
void perevod(int num, int osn, int drob, char temp[], int k)
{
int mod, i, tc, m;
char symbols[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
double td1 = (double) drob, td2;
for (i = 0; num != 0; i++)
{
mod = num;
num = num / osn;
mod = mod % osn;
temp[k-6-i] = symbols[mod];
}

temp[k-5] = '.';
for (i = -4; i <= -2; i++)
{
td2 = td1;
td1 = (td1 * osn) / 1000;
tc = (int) (td2 * osn) / 1000;
td1 = (td1 - tc) * 1000;
temp[k+i] = symbols[tc];
}
temp[k-1] = '\0';
}
void rav(char stroka[36])
{
int i = 0, k = 0;
strupr(stroka); 
if (stroka[(strlen(stroka))-1]=='.')
printf("Chislo vvedeno nepravilno");
else
{
while (((stroka[i] >= '0' && stroka[i] <= '9')||stroka[i]=='.') ||
((stroka[i] >= 'A' && stroka[i] <= 'J')||stroka[i]=='.'))
{
if (stroka[i]=='.')

k++;
i++;
}
if (k>1)
printf(" Tochka vvedena bolee odnogo raza \n");
else
{
if (stroka[i]!='\0') printf("\n");
}
Начало
}
}
+
-
(argv[1] != NULL) &&
(!(strcmp("-v", argv[1])))
Задание №
nu 2
m, osn, osn1, drob, i, x, k = 1
Вывод
Рисунок 1– Блок-схема к задан
nu и
mюb №
er  2= 0
«Версия 0.01 beta»
temp[36]
Функция main.
3
srand(time(NULL))
num = 1 + rand()
osn = 2 + rand() % 19
+
osn == 10
-
1

1
osn1 = osn;
drob = 111 + rand() % 889
number = (double) num;
k = kolvo(number, osn, k) + 5
perevod(num, osn, drob, temp, k)
Вывод
задания
osn = 2 + rand() % 19
+
osn == osn1 || osn == 10
-
Вывод
задания
2

2
k = kolvo(number, osn, k) + 5
result[k]
perevod(num, osn, drob, temp, k)
Ввод
результата
rav(result)
+
-
((strncmp(temp, result,k))<0) ||
((strncmp(temp, result,k))>0)
Вывод
«Ошибка.
Вывод
Введите результат
«Правильно»
снова»
3
Конец

Начало
Рисунок 2– Блок-схема к заданию №2
Функция kolvo.
k = 1
-
number >= osn
+
number =
 number / osn
k = k +1
Конец

Начало
Рисунок 3– Блок-схема к заданию №2
Функция perevod.
mod, i, tc, m,
symbols[],
td1,td2
i = 0; num !=0; i = i + 1
mod = num;
num = num / osn;
mod = mod % osn;
temp[k-6-i] = symbols[mod]
temp[k-5] = '.'
1

1
i = 0; num !=0; i = i + 1
td2 = td1;
td1 = (td1 * osn) / 1000;
tc = (int) (td2 * osn) / 1000;
td1 = (td1 - tc) * 1000;
temp[k+i] = symbols[tc]
temp[k-1] = '\0'
Конец

Рисунок 4– Блок-схема к заданию №2
Функция rav.
Начало
i = 0, k = 0
strupr(stroka)
+
-
stroka[(strlen(stroka))-1] == '.'
Вывод
«Число введено
1
неправильно»
3

1
((stroka[i] >= '0' && stroka[i] <= '9')||
-
-
stroka[i]=='.') ||
 ((stroka[i] >= 'A' && stroka[i] <= 'J')||
stroka[i]=='.')
+
+
stroka[i] == '.'
k = k + 1
-
i = i + 1
2

2
+
-
k>1
Вывод
«Точка введена
более одного раза»
+
stroka[i] != '\0'
Вывод
-
«\n»
3
Конец

Полный исходный текст программы.
#include
#include
#include
#include
#include
#include
void perevod(int, int, int, char [], int);
int kolvo(double, int, int);
void rav(char []);
main(int argc,char *argv[])
{
if ((argv[1] != NULL) && (!(strcmp("-v", argv[1]))))
printf("\n\n***Version 0.01 beta***\n\n");
else
{
int num, osn, osn1, drob, i, k = 1, x;
double number;
char temp[36];

srand(time(NULL));
num = 1 + rand();
do
osn = 2 + rand() % 19;
while (osn == 10);
osn1 = osn;
drob = 111 + rand() % 889;
number = (double) num;
k = kolvo(number, osn, k) + 5; 
perevod(num, osn, drob, temp, k);
printf("Perevedite chislo "%s" s osnovaniem %d", temp, osn);
do
osn = 2 + rand() % 19;
while (osn == osn1 || osn == 10);
printf("\nv sistemu schislenia, osnovanie kotoroi %d.
\n\nVvedite rezultat:\n\n", osn);
k = kolvo(number, osn, k) + 5;
char result[k];
perevod(num, osn, drob, temp, k);
do
{
scanf("%s", result);

rav(result);
if (((strncmp(temp, result, k)) < 0) || ((strncmp(temp, result, k)) > 0))
printf("\nOshibka! Poprobuite snova.\nVvedite rezultat: ");
else
{
printf("\nRIGHT !\n\n");
break;
}
} while (1);
}
return 0;
}
int kolvo(double number, int osn, int k)
{
k = 1;
while (number >= osn)
{
number = number / osn;
k++;
}
return k;
}
void perevod(int num, int osn, int drob, char temp[], int k)
{
int mod, i, tc, m;

char symbols[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
double td1 = (double) drob, td2;
for (i = 0; num != 0; i++)
{
mod = num;
num = num / osn;
mod = mod % osn;
temp[k-6-i] = symbols[mod];
}
temp[k-5] = '.';
for (i = -4; i <= -2; i++)
{
td2 = td1;
td1 = (td1 * osn) / 1000;
tc = (int) (td2 * osn) / 1000;
td1 = (td1 - tc) * 1000;
temp[k+i] = symbols[tc];
}
temp[k-1] = '\0';
}
void rav(char stroka[36])
{
int i = 0, k = 0;

strupr(stroka); 
if (stroka[(strlen(stroka))-1]=='.')
printf("Chislo vvedeno nepravilno");
else
{
while (((stroka[i] >= '0' && stroka[i] <= '9')||stroka[i]=='.') ||
((stroka[i] >= 'A' && stroka[i] <= 'J')||stroka[i]=='.'))
{
if (stroka[i]=='.')
k++;
i++;
}
if (k>1)
printf(" Tochka vvedena bolee odnogo raza \n");
else
{
if (stroka[i]!='\0') printf("\n");
}
}
}


Похожие:

Курсовая работа по дисциплине: «Информатика» iconКурсовая работа по дисциплине: «Информатика»

Курсовая работа по дисциплине: «Информатика» iconКурсовая работа по дисциплине «Информатика»
Составители: Н. В. Зуева, Н. Ф. Екимова, С. В. Мичурин, Т. Ф. Оси- пова, И. П. Павлова, А. М. Смирнов, А. Г. Степанов
Курсовая работа по дисциплине: «Информатика» iconКурсовая   работа   по   учебной   дисциплине   является   одним   из 
Курсовая работа выполняется студентом на третьем курсе по любой  из изучаемых дисциплин
Курсовая работа по дисциплине: «Информатика» iconКурсовая работа выполняется по актуальным вопросам систем обработ
...
Курсовая работа по дисциплине: «Информатика» iconКурсовая работа по дисциплине «Компьютерная графика»
Данная курсовая работа посвящена планировке и разработке бдау (Базе Данных Арбитражного Управляющего, работающей «в веб браузере»)...
Курсовая работа по дисциплине: «Информатика» iconКурсовая работа по дисциплине

Курсовая работа по дисциплине: «Информатика» iconКурсовая работа   по дисциплине «Макроэкономика» 
Введение                                                                                                                   3 
Курсовая работа по дисциплине: «Информатика» iconКурсовая работа    По дисциплине «Экономика предприятия»

Курсовая работа по дисциплине: «Информатика» iconКурсовая работа  по дисциплине «Макроэкономика» 
Введение                                                                                                            
Курсовая работа по дисциплине: «Информатика» iconКурсовая работа по дисциплине «Микроэкономика»
Предисловие   5 
Разместите кнопку на своём сайте:
TopReferat


База данных защищена авторским правом ©topreferat.znate.ru 2012
обратиться к администрации
ТопРеферат
Главная страница