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

Кодирование слов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Блок-схема алгоритма работы программы http://www.cyberforum.ru/cpp-beginners/thread978332.html
#include <iostream> #include <conio.h> #define LENGTH 20 int main() { int array = {1, 5, 6, 3, 12, 36, 87, 91, 34, 85,2,4,5,6,8,9,0,1,5,7}, counter = 0;
C++ макрос препроцессора Здравствуйте ув. форумчани. Читаю книгу "Философия с++. Введение в стандартный с++". Дошел к одному примеру. И все компилируется, но результат выполнения математических операций не выводится. Как я понимаю вся проблема в макросе PRINT, т.к. если результат через cout вполне нормально выводит. Хочется узнать, что не так собственно говоря. Вот сам код: // Математические операторы; #include... http://www.cyberforum.ru/cpp-beginners/thread978318.html
C++ Найти минимальный элемент среди положительных элементов массива
Найти минимальный элемент среди положительных элементов массива А. А(20). Это значит что нужно вывести на экран единицу?
Не могу разораться в коде. (сортировка слиянием) C++
Здравствуйте. У меня код алгоритма сортировки слиянием и я не могу понять некоторые строчки кода, что они делают. Вот к примеру "while (l1 && l2)" - как работает тот цикл. Если можно, напишите что делает каждая строчка данного кода. template <class MARGE> MARGE* merge(MARGE *m1, MARGE* m2, int l1, int l2) { MARGE* masyv = new MARGE; int n = 0; while (l1 && l2)
C++ Выборка из текстового файла знаков препинания и сохранение их в отдельный файл http://www.cyberforum.ru/cpp-beginners/thread978280.html
Дан текстовый файл. Создать файл содержащий все знаки препинания встретившиеся в текстовом файле (в том же порядке)
C++ Обработка последовальности случайных чисел с использованием for Обчислить характеристики последовальности случайных чисел за модулем 100( разница между максимальным и минимальным числом - розмах) подробнее

Показать сообщение отдельно
Xerocry
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 21
15.10.2013, 19:22     Кодирование слов
Здравствуйте, форумчане. Тренируюсь в с++ - пишу программу. Смысл её в кодировании в ту и в другую сторону слов, учитывая, что a-1, b-2, z-26, aa-27(максимальная длина слова-20 символов). Я понял, что это схоже с переводом из 26-ричной системы счисления в десятичную и обратно. Но к сожалению, ни один тип данных не поддерживает такие большие значения, при работе с числами напрямую(26^20+26^19...26^0). Я предполагаю, что необходимо использовать структуры, но не понимаю сам алгоритм ,по которому должна работать программа. Есть работающий пример, но там ничего не понятно. Буду благодарен, если мне кто-либо объяснить, как работает эта программа, или похожий алгоритм.

Заранее спасибо

Программа: http://pastebin.com/WqCZxx2G

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
#include <stdio.h>
#include <conio.h>
#include <locale>
#include <windows.h>
#include <Math.h>
#include <stdlib.h>
 
typedef struct {
        int len;
        int num[50];
} big;
 
 
big number;
big letter;
 
 
 
void sum(big *a, int n, int base)
{
        int i;
 
        for(i=0; i<(*a).len; i++)
        {
                (*a).num[i] += n;
                n = ((*a).num[i] / base);
                (*a).num[i] %= base;
        }
        while (n)
{
                (*a).num[(*a).len] = (base==26 ? n-1 : n);
                n /= base;
                (*a).num[(*a).len] %= base;
                (*a).len++;
        }
}
void mul(big *a, int n, int base) {
        for(int i=0; i<(*a).len; i++) {
                if (base==26) {
                        (*a).num[i] = ((*a).num[i]+1) * n - 1;
                } else {
                        (*a).num[i] *= n;
                }
        }
        n=0;
        for(int i=0; i<(*a).len; i++) {
                (*a).num[i] += n;
                n = ((*a).num[i] / base);
                (*a).num[i] %= base;
        }
        while (n) {
                (*a).num[(*a).len] = (base==26 ? n-1 : n);
                n /= base;
                (*a).num[(*a).len] %= base;
                (*a).len++;
        }
}
 
void
num2letters() {
        int i;
 
        letter.len = 0;
        for(i=number.len-1; i>=0; i--) {
                mul(&letter, 10, 26);
                sum(&letter, number.num[i], 26);
        }
}
 
void letters2num() {
        number.len = 0;
        for(int i=letter.len-1; i>=0; i--)
        {
                mul(&number, 26, 10);
                sum(&number, letter.num[i], 10);
                sum(&number, 1, 10);
        }
}
 
int
main(void) {
        char buf[1024];
 
        while(scanf("%s", buf)==1) {
                int i;
                if (!strcmp(buf, "*")) {
                        break;
                }
 
                if (buf[0]>='0' && buf[0]<='9') {
                        number.len = strlen(buf);
                        for(i=0; i<number.len; i++) {
                                number.num[i] = buf[number.len-i-1]-'0';
                        }
                        num2letters();
                } else {
                        letter.len = strlen(buf);
                        for(i=0; i<letter.len; i++) {
                                letter.num[i] = buf[letter.len-i-1]-'a';
                        }
                        letters2num();
                }
                for(i=letter.len-1; i>=0; i--) {
                        printf("%c", 'a'+letter.num[i]);
                }
                printf("%.*s", 22-letter.len,
                                "                                                       ");
                for(i=number.len-1; i>=0; i--) {
                        printf("%c", '0'+number.num[i]);
                        if (i && (i%3==0)) {
                                printf(",");
                        }
                }
                printf("\n");
        }
 
        exit(0);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru