H22 (Все лабы по инфе за 2ой сем на С++)
Описание файла
Файл "H22" внутри архива находится в следующих папках: Все лабы по инфе за 2ой сем на С++, Инфа - бесценно, homework. Документ из архива "Все лабы по инфе за 2ой сем на С++", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.
Онлайн просмотр документа "H22"
Текст из документа "H22"
Московский Государственный Технический Университет
имени Н.Э.Баумана
Домашняя работа
по теме
«Программирование
на языке высокого уровня»
Вариант H22
Выполнил:
Студент РК6-33
Купцов Д.
Проверила:
Волосатова Т.М.
Москва 2006г.
Техническое задание
Введение
Разработать программу для преобразования натуральных чисел, заданных арабскими цифрами (0-9), в эквивалентную запись римскими цифрами I, V, X, L, C, D и M, которые имеют значения 1, 5, 10, 50, 100, 500 и 1000, соответственно. При записи числа в римской системе счисления необходимо учитывать, что значения стоящих рядом цифр должны суммироваться, если они расположены в не возрастающем порядке, и вычитаться когда слева от большей цифры стоит меньшая по величине. При этом в римской системе счисления порядок вычитаемых цифр не должен различаться больше, чем на единицу. Преобразуемые натуральные числа, записанные арабскими цифрами, должны передаваться программе через поток стандартного ввода (stdin). Отображение их записи в римской системе счисления должно осуществляться через поток стандартного вывода (stdout). Ввод и преобразование чисел должны продолжаться пока не получен признак конца потока стандартного ввода (stdin), установленный в операционной среде выполнения программы.
Основания для разработки
«Учебный план» - документ, на основании которого ведется разработка.
Кафедра РК6 - организация, утвердившая этот документ.
Назначение разработки
Программа предназначена для перевода чисел из арабской системы в римскую.
Требования к программе или программному изделию
-
Требования к функциональным характеристикам
Исходные данные передаются программе через поток стандартного ввода (stdin).
-
Требования к надежности
Программа должна быть устойчива к вводу некорректных данных. Корректный выход из программы должен осуществляться после выполнения соответствующего вычисления.
-
Условия эксплуатации
Без ограничений.
-
Требования к составу и параметрам технических средств
IBM совместимый персональный компьютер.
-
Требования к информационной и программной совместимости
Программа предназначена для работы в ОС Linux и ОС Windows с использованием командной строки.
-
Требования к маркировке и упаковке
Без ограничений.
-
Требования к транспортированию и хранению
Транспортировка и хранение осуществляется на любых известных носителях надлежащего качества.
-
Специальные требования
Программа должна быть совместима с ОС Windows на уровне исходного кода.
Требования к программной документации
Основной программной документацией является «Текст программы».
Технико-экономические показатели
Программа способна эффективно функционировать на любых персональных компьютерах, ноутбуках и серверах с процессором не ниже i386, кроме того не требует от пользователей дополнительных усилий по её освоению, что даёт возможность её широкого применения на предприятиях и частными лицами.
Стадии и этапы разработки
-
Предпроектное иследование. Изучая широко известные программные продукты, было выявлено отсутствие аналогичных программ, способных реализовать поставленную задачу.
-
Экскизное и техническое проектирование. Написание программы велось на языке высокого уровня С, с учетом всех требований структурного программирования.
-
Изготовление опытного образца производилось в среде разработки OS SuSE Linux 10 с использованием GCC компилятора.
-
Испытание опытного образца выявило отсутствие ошибок и утечек системных ресурсов.
Порядок контроля и приёмки
Программа должна пройти испытания на устойчивость работы и правильность получаемых результатов при вводе пользователем любых данных.
Правила ввода данных:
Данные вводятся через поток стандартного ввода stdin. Должно быть введено положительное целое число в арабской системе счисления.
Результатом работы программы являются перевод введенного числа в римскую СС и вывод его через поток стандартного вывода.
Описание алгоритма.
В функции main в цикле, который прервется, когда получен конец потока ввода, преобразуем с помощью функции atoi строку из буфера в число. Если введено правильное число то вызываем функцию fprint_rim, которая предназначена для печати числа в римской системе счисления. В этой функции создаются два массива – в первом характерные «числа» в римской СС:
char *zns[13] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
А во втором – числа в арабской системе, им соответствующие. Далее следует цикл для каждого элемента массива, начиная с начала. Мы вычитаем его значение в арабской системе из введенного пользователем числа и выводим это число. Таким образом мы выведем строку, содержащую римское представление введенного пользователем числа.
Список литературы.
-
Волосатова Т.М., Лекции “Программирование на языке высокого уровня С”. МГТУ 2006г.
-
Б. Керниган, Д. Ритчи “Язык программирования С”
Текст программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RIM 3999
void fprint_rim(FILE *, char *, int);
int main (int argc, char *argv[])
{
int num;
char buf[BUFSIZ];
fprintf(stdout, "\nВведите число: ");
while (fgets(buf, BUFSIZ, stdin) != NULL)
{
num = atoi(buf);
if (num < 1 || num > MAX_RIM)
fprintf(stderr, "Число должно быть от 1 до %d!", MAX_RIM);
else
fprint_rim(stdout, "По римски: ", num);
fprintf(stdout, "\n\nВведите число: ");
}
return 0;
}
void fprint_rim(FILE *stream, char *pstr, int chislo)
{
const int znc[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
const char *zns[13] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int i;
fprintf(stream, pstr);
for (i = 0; i < 13; i++)
{
while (chislo - znc[i] >= 0)
{
chislo -=znc[i];
fprintf(stream, "%s", zns[i]);
}
}
return;
}
4