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

Задача по программированию(неудачный перевод кода) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как понять строку declare http://www.cyberforum.ru/cpp-beginners/thread994676.html
SWITCH_DECLARE(const switch_state_handler_table_t *) switch_core_get_state_handler(_In_ int index); не понятно зачем в возвращаемом параметре стоит Слово const
C++ Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2 8. Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524. http://www.cyberforum.ru/cpp-beginners/thread994672.html
В массиве целых чисел найти количество чисел с наименьшим количеством цифр C++
9. В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11} таких чисел 4, это 34, 56, 20,
C++ поскажите или напишите программу с циклом for
Предположим, что A говорит: "Или я лжец, или два плюс два - пять". К какому заключению можно прийти на основании этого утверждения?
C++ Составить, которая определяет количество цифр одного целого числа. http://www.cyberforum.ru/cpp-beginners/thread994656.html
11. Составить и использовать функцию, которая определяет количество цифр одного целого числа.
C++ Определить минимальное значение среди вычисленных значений t Вычислить значения t, соответствующие каждому значению х ( xn≤x≤xk , шаг изменения x равен dx) по формуле: t=(a+b)2√((a+x)/(sin(b+x)+1,1)) Вычислить количество отрицательных значений x. Определить минимальное значение среди вычисленных значений t. На экран выводить каждую вторую пару значений x и t. Контрольный расчёт провести при a=6.13, b=3.42, xn=-2, xk=3, dx=0.5. Вот то что я сделал: ... подробнее

Показать сообщение отдельно
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36

Задача по программированию(неудачный перевод кода) - C++

01.11.2013, 16:00. Просмотров 342. Ответов 4
Метки (Все метки)

Во время экперимента Накодиллы было случайно получено сообщение инопланетян, содержащее формулу вида A + B = C.

Общественности стало интересно, какую же систему счисления используют инопланетяне. Так как внеземная цивилизация была достаточно развита, чтобы отправить межпланетное сообщение, Накодилла предположил, что основание системы счисления довольно мало. Требуется написать программу, которая находит минимальное основание системы счисления, при котором данное равенство выполняется.

Формат входного файла

В единственной строке входных данных содержится равенство вида A + B = C. Строка не содержит пробелы, числа состоят из цифр от 0 до 9 и заглавных латинских букв от А до Z

Формат выходного файла

Требуется вывести единственное число – искомое основание системы счисления. Если такой системы счисления не существует, то вывести -1. Гарантируется, что ответ не превышает 36.

Пример:

Ввод:
2+2=4
Вывод:
5

К этой задаче я нашел код на алгоритмическом языке(КуМир) и попытался перевести на C++
Вот ссылка: http://gym1544.ru/EGE_GIA/dz211013.pdf
Оригинал:
Кликните здесь для просмотра всего текста

использовать Строки
лит A,B,C,Ф,стр
цел Ы,i,чис1,чис2,чис3,начсс,макс
лог усп
алг
нач
ввод A,B,C
стр:=A+B+C
макс:=0
нц для i от 1 до длин(стр)
если код(стр[i])>макс
то макс:=код(стр[i])
все
кц
Ф:=символ(макс)
начсс:=перевод1(Ф)+1
нц для i от начсс до 36
если найти(цел_в_лит(i),A)=-1
то
если длин(A)>1
то чис1:=перевод2(A,i)
иначе чис1:=перевод1(A)
все
если длин(B)>1
то чис2:=перевод2(B,i)
иначе чис2:=перевод1(B)
все
если длин(C)>1
то чис3:=перевод2(C,i)
иначе чис3:=перевод1(C)
все
если чис3=чис1+чис2
то вывод i; выход
все
все
кц
кон

{функция перевод2}
алг цел перевод2(арг лит стр,цел осн)
нач
лог усп, цел i, циф1, циф2
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
если стр[2]>="0" и стр[2]<="9"
то
циф2:=лит_в_цел(стр[2],усп)
иначе
циф2:=код(стр[2])-55
все
знач:=циф1*осн+циф2
кон

{функция перевод1}
алг цел перевод1(арг лит стр)
нач
лог усп, цел циф1
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
знач:=циф1
кон


"Мое" творчество:
Кликните здесь для просмотра всего текста
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
121
#include <iostream>
#include <string>
 
using namespace std;
 
int searchchar(char a, string b)
{
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            return i;
            break;
        }
    }
};
 
string slovo(string a, int b, int c)
{
    string d;
    for (int i=b; i<c; ++i)
    {
        d+=a[i];
    }
    return d;
};
 
int perevod1(string a)
{
    int num;
    if (((int)a[0]>=48)&&((int)a[0]<=57))
    {
        num=atoi(&a[0]);
    }
    else
    {
        num=(int)a[0]-55;
    }
    return num;
};
 
int perevod2(string str, int bas)
{
    int num_1, num_2;
    if (((int)str[0]>=48)&&((int)str[0]<=57))
    {
        num_1=atoi(&str[0]);
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=atoi(&str[1]);
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
 
int main()
{
    string A, B, C, str1, str, F;
    char c;
    int a1, a2, a3, bi, num1, num2, num3, start, maxnum;
    bool can;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 1, a1);
    B=slovo(str1, a1+1, a2);
    C=slovo(str1, a2+1, str1.length());
    str=A+B+C;
    maxnum=0;
    for(int i=1; i<str.length(); ++i)
    {
        if ((i+'0')>maxnum)
        {
            maxnum=(i+'0');
        }
    }
    F=(char)maxnum;
    start=perevod1(F)+1;
    for (int i=start; i<36; ++i)
    {
        if(A.length()>1)
        {
            num1=perevod2(A, i);
        }
        else
        {
            num1=perevod1(A);
        }
        if(B.length()>1)
        {
            num2=perevod2(B, i);
        }
        else
        {
            num2=perevod1(B);
        }
        if(C.length()>1)
        {
            num3=perevod2(C, i);
        }
        else
        {
            num3=perevod1(C);
        }
        if (num3==(num1+num2))
        {
            cout << i;
            break;
        }
    }
    return 0;
}

Но этот код не компилируется... помогите, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru