Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36

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

01.11.2013, 16:00. Показов 1478. Ответов 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;
}

Но этот код не компилируется... помогите, пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2013, 16:00
Ответы с готовыми решениями:

Двумерная задача теплопроводности, перевод кода с Pascal на C++
Добрый день. По учебе, понадобилось первести код для решения двумерной задачи теплопроводности с Pascal на C++. Вот руководство ...

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

задача по программированию
Помогите пожалуйста решить! С клавиатуры вводятся длина (&lt;=100) вектора и его (целые) элементы. Посчитать сумму нечётных элементов....

4
 Аватар для Folko
267 / 255 / 27
Регистрация: 27.09.2013
Сообщений: 876
Записей в блоге: 1
01.11.2013, 16:03
ShiftDj, а какие ошибки выводит? Скопируйте
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 16:29  [ТС]
Извиняюсь, не правильно выразился: код компилируется, но после ввода всегда выходит ошибка:
Миниатюры
Задача по программированию(неудачный перевод кода)  
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 23:56  [ТС]
Не судите название строго просто надо было быстро скомпилировать код, вот так и назвал

Добавлено через 7 часов 26 минут
По сути, я решил... Но все равно программа проходит лишь 5 тестов из 8, уж не знаю почему...
Кликните здесь для просмотра всего текста
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <string>
using namespace std;
 
int searchchar(char a, string b)
{
    int c=0;
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            c=i;
        }
    }
    return c;
};
 
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=(int)a[0]-48;
    }
    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=(int)str[0]-48;
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=(int)str[1]-48;
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
int perevod3(char a)
{
    int num;
    if (((int)a>=48)&&((int)a<=57))
    {
        num=atoi(&a);
    }
    else
    {
        num=(int)a-55;
    }
    return num;
};
 
 
int main()
{
    string A, B, C, str1, str;
    char c, F;
    int a1, a2, bi, num1, num2, num3, start, maxnum;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 0, 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 ((str[i])>maxnum)
        {
            maxnum=(str[i]);
        }
    }
    F=maxnum;
    start=perevod3(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;
        }
    }
    if (num3!=(num1+num2))
    {
        cout << -1;
    }
    return 0;
}
0
02.11.2013, 00:05

Не по теме:

возможно здесь замешаны инопланетяне!?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2013, 00:05
Помогаю со студенческими работами здесь

Задача по программированию
Друзья, помогите с задачей по программированию. Дан массив t из 10 элементов, в каждом находится структура x в которой соответственно...

задача по программированию С++
Помогите пожалуйста написать задачу на C++ по фото . Задача B2

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

Задача по программированию
Дана матрица 4х4. Найти номер строки и номер столбца максимального элемента.

Задача по программированию
Составить программу упорядочения элементов по убыванию во втором столбце матрицы A(N,N).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru