Форум программистов, компьютерный форум CyberForum.ru

Перевод римских чисел в арабские и наоборот - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Использование функций-шаблонов http://www.cyberforum.ru/cpp-beginners/thread403221.html
Здравствуйте нужна помощь по задаче на использование функций-шаблонов: Для работы с двумерными массивами арифметических типов данных разработать шаблоны ввода и вывода массива, а также шаблон для решения основной задачи: Подсчитать среднее арифметическое ненулевых элементов, расположенных над побочной диагональю. И на всякий случай выпишу то, что сама накарябала :) : #include <iostream>...
C++ Напечатать в алфавитном порядке все различные русские буквы , входящие в введенный текст Заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread403213.html
Динамический массив C++
при помощи случайных чисел сформировать два динамических массива A и B содержащих 15 элементов. Третий массив сформировать по формуле {S}_{i}=\sqrt{\left| {x}^{3}_{i}-{y}_{i}^{3}\right|} Наити индексы максимального и минимального элементов третьего массива. На экран вывести исходные массивы, сформированный массив и индексы макс. и минимального элемента. Народ помогите!!! Задача на Си++
Определить количество различных эле-ментов в массиве C++
Задан массив из k символов. Определить количество различных эле-ментов в массиве. Увы код который мне с самого начала пришел в голову, считает все комбинации разл. элементов. Подайте идею какую =) #include <stdio.h> int a,b=0,i,j,A,B; void main() { printf("Kolichestvo elementov massiva: "); scanf("%d", &a); printf("Vvedite elementi massiva ");
C++ Количество встречающейся буквы http://www.cyberforum.ru/cpp-beginners/thread403200.html
Народ, помогите, надо написать программу... Задача: дана строка, определить, сколько раз в неё входит та или иная введённая с клавиатуры буква
C++ Имеется четыре произвольных числа: А, B, C, D. Пожалуйста, очень Вас прошу, помогите мне мне очень срочно нужно сдать эти программы!!! Я буду очень признательна ПОЖАЛУЙСТА, УМОЛЯЮ ВАС помогите мне((( вот задачи 1.Имеется четыре произвольных числа: А, B, C, D. ЭВМ должна ответить на вопрос: Правда ли что среди чисел точно одно меньше нуля? Ответ ЭВМ должна вывести в виде слова «Правда» или «Неправда». 2.Имеется массив А из N произвольных... подробнее

Показать сообщение отдельно
RomanLesNik
12 / 12 / 1
Регистрация: 04.08.2010
Сообщений: 80
19.12.2011, 23:05     Перевод римских чисел в арабские и наоборот
Привет. Ниже пример транслятора "Римская запись-> арабская". Работает нормально: проверяются правила вычитания(например,IIX-ошибка),проверяется количество повторов символов(по правилам не более 3-х), проверяется допустимость введенных символов. Если заинтересует могу записать грамматику на которой все это построено.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "stdafx.h"
 
int lookahead=0;                                //считанный символ
int tmp=0,sum=0;                                //значение предыдущего символа, сумма
int repetition=0;                               //количество повторов символов 
 
void error();                                   //Сообщение об ошибке   
bool validterm(int t,char str[],int counter);   //проверка на допустимость символа 
void validation();
 
void term();                                    //Реализация граматики
void rest(int t);
void expr();                        
 
void main() 
{ 
  expr(); 
  printf("%i",sum);
  getch();
} 
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Реализация граматики
//EXPR
void expr() 
{ 
  term();
  rest(lookahead);   
} 
 
//TERM
void term()
{
    if(tmp==lookahead) repetition++;            //считаем количество повтров символов
    else repetition=0;
 
    if(lookahead=='I') {        
        sum+=1;                     //I
        tmp='I';
    }    
    else if(lookahead=='V') { 
        if (tmp=='I') sum+=3;       //I TERM1
        else sum+=5;                //TERM1
        tmp='V';
    }    
    else if(lookahead=='X') { 
        if (tmp=='I') sum+=8;       //I TERM1
        else sum+=10;               //TERM1
        tmp='X';
    } 
    else if(lookahead=='L') { 
        if (tmp=='X') sum+=30;      //X TERM2
        else sum+=50;               //TERM2
        tmp='L';
    }    
    else if(lookahead=='C') { 
        if (tmp=='X') sum+=80;      //X TERM2
        else sum+=100;              //TERM2
        tmp='C';
    }    
    else if(lookahead=='D') { 
        if (tmp=='C') sum+=300;     //C TERM3
        else sum+=500;              //TERM3
        tmp='D';
    }    
    else if(lookahead=='M') { 
        if (tmp=='C') sum+=800;     //C TERM3
        else sum+=1000;             //TERM3     
        tmp='M';
    }
 
}
 
//REST
void rest(int t) 
{ 
  if ((lookahead=getchar())!='\n'){  // E 
       validation();
       term();                       //TERM REST
       rest(lookahead); 
  }
} 
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Обработка и поиск ошибок
 
//Проверка на допустимость символа
bool validterm(int ch,char str[],int counter)
{   
    for(int i=0;i<counter;i++)
        if (ch==str[i]) return true;
    return false;
}
 
//сообщение об ошибке
void error() 
{ 
    printf("Sintax error\n");
    getch();
    exit(1);  
} 
 
void validation()
{
       if (!validterm(lookahead,"IVXLCDM",7)) error();              //проверка на допустимость символа
       if(repetition>2) error();                                    //проверка на количество повторений
       if (lookahead==tmp && validterm(lookahead,"VLD",3))error();  //Символы VLD не могут повторяться                             
       if (lookahead=='M' && validterm(tmp,"IVXLD",5)) error();     //проверка выполнения правил вычитания
       if (lookahead=='D' && validterm(tmp,"IVXL",4)) error();
       if (lookahead=='C' && validterm(tmp,"IVL",3)) error();
       if (lookahead=='L' && validterm(tmp,"IV",2)) error();
       if (lookahead=='X' && tmp=='V') error();
       //проверка на количество повторений в правилах вычетания
       if (repetition>0 && tmp=='I' && validterm(lookahead,"VXLCDM",6)) error();
       if (repetition>0 && tmp=='X' && validterm(lookahead,"LCDM",4)) error();
       if (repetition>0 && tmp=='C' && validterm(lookahead,"DM",2)) error();
 
 }
 
Текущее время: 03:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru