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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
soulofdarkness
1 / 1 / 0
Регистрация: 20.11.2009
Сообщений: 21
#1

Перевод текста в произвольную систему счисления - C++

20.11.2009, 11:54. Просмотров 1607. Ответов 4
Метки нет (Все метки)

Задача такая (перевод с эстонского):

С клавиатуры вводится:
- Р - натуральное число, 0 < P < 21.
- S - массив строк P-ичных чисел (т.е. P - основание системы счисления).
- N - число элементов массива S.

Затем выводится в начальном виде (?) и в десятичной системе.

Часы, проведенные за поиском в интернете в общем и на вашем форуме в частности, результатов не принесли =(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2009, 11:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод текста в произвольную систему счисления (C++):

Перевод натурального числа из десятичной системы счисления в систему счисления по основанию - C++
Здравствуйте. Я хотела бы попросить у вас помощи. Я понимаю, что это не очень красиво, но вдруг кто-нибудь откликнется. Я не очень...

Перевод строки из 2-ной системы счисления в 8-ную систему счисления - C++
помогите пожалуйста как сделать перевод строки из 2 системы счисления на 8 систему счисления через массив ?

Перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки и обратно - C++
Нужно две программы, одна реализует перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки, а другая...

Перевод чисел из 16 системы счисления в 2 систему счисления - C++
Помогите составить программу для перевод чисел из 16 с/c в 2 c/c при условии,что программ может переводить и дробные числа.

Перевод из 2-ой в 10-ую систему счисления - C++
как делать?

Перевод в 9-чную систему счисления - C++
есть задача, что бы решить ее до конца мне надо сделать перевод из 10-тичной(можно любой другой) в девятиричную систему счисления я бы...

4
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
20.11.2009, 12:39 #2
в чём стопор? вопрос о переводе в различные системы за последнее время поднимался не раз. условие несколько запутано. но к С/С++ это отношения не имеет

Добавлено через 19 секунд
конкретизируйте вопрос
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
20.11.2009, 13:34 #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
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
/* Задача такая (перевод с эстонского):
 
С клавиатуры вводится:
- Р - натуральное число, 0 < P < 21.
- S - массив строк P-ичных чисел (т.е. P - основание системы счисления).
- N - число элементов массива S.
 
Затем выводится в начальном виде (?) и в десятичной системе.
*/
 
 
char *DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz";
 
void printByBase(int val, size_t base){
    if ( val / base )
        printByBase(val / base, base);
    putchar(DIGITS[val % base]);
}
 
int main(void){
    char buf[BUFSIZ];
    size_t count, base, i;
    int *arr;
    long tmp;
    
    printf("Notation base: ");
    scanf("%i", &base);
    if ( base < 2 || base > 36 ){
        printf("ERROR: base must be between 2 and 36\n");
        exit(1);
    }
    printf("Number of elements: ");
    scanf("%i", &count);
    if ( count < 1 ){
        printf("ERROR: array must contain at least 1 element\n");
        exit(1);
    }
    getchar(); /* удалить из потока \n */
    if ( (arr = (int*)calloc(count, sizeof(int))) == NULL ){
        printf("ERROR: not enough memory\n");
        exit(1);
    }
    
    printf("Enter %i elements in %d based notation...\n", count, base);
    for ( i = 0; i < count; i++ ){
        printf("Array[%i] = ", i);
        fgets(buf, BUFSIZ, stdin);
        tmp = strtol(buf, NULL, base);
        if ( !tmp )
            printf("WARNING: wrong value for this notation or zero value!\n");
        arr[i] = (int)tmp;
    }
    
    printf("\n%d\t%d\n------------------------------------------------------------\n", base, 10);
    for ( i = 0; i < count; i++ ){
        printByBase(arr[i], base);
        printf("\t%d\n", arr[i]);
    }
    
    free(arr);
    arr = NULL; 
    
    return 0;
}
Можно, конечно, числа и в строках хранить, но хлопотно, да и смысла в этом никакого...
1
soulofdarkness
1 / 1 / 0
Регистрация: 20.11.2009
Сообщений: 21
27.11.2009, 12:30  [ТС] #4
Спасибо огромное. Со всем практически разобрался, но все равно не могу сообразить, как исправить одну ошибку. Если ввести число в неправильной системе счисления, но выдает ошибку, но не переспрашивает элемент =(
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
28.11.2009, 03:01 #5
Цитата Сообщение от soulofdarkness Посмотреть сообщение
Если ввести число в неправильной системе счисления, но выдает ошибку, но не переспрашивает элемент
Вот так переспрашивает
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
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
 
/* Перевод строки str в число val типа long int. Возвращает 0, если удачно, или 1 если не удачно 
    Проверка *endptr != '\0' может оказаться излишне строгой, так, что, лучше ничего лишнего в str не передавать */
 
int parseVal(const char *str, size_t base, long int *val){
    char *endptr;
    
    if ( !str || !(*str) || base < 2 || base > 36 || !val )
        return 1;
        
    errno = 0;
    *val = strtol(str, &endptr, base);
    
    if ( (errno == ERANGE && (*val == LONG_MAX || *val == LONG_MIN)) || (errno != 0 && *val == 0) || (*endptr != '\0') )
        return 1;
    
    return 0;
}
 
 
/* Печать числа в заданной системе счисления */
 
void printByBase(long int val, size_t base){
    static const char *DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz";
    if ( !base )
        return;
    if ( val / base )
        printByBase(val / base, base);
    putchar(DIGITS[val % base]);
}
 
/* Задача такая (перевод с эстонского):
 
С клавиатуры вводится:
- Р - натуральное число, 0 < P < 21.
- S - массив строк P-ичных чисел (т.е. P - основание системы счисления).
- N - число элементов массива S.
 
Затем выводится в начальном виде (?) и в десятичной системе.
*/
 
int main(void){
    char buf[BUFSIZ];
    size_t count, base, i;
    long int *arr;
    
    printf("Notation base: ");
    scanf("%i", &base);
    if ( base < 2 || base > 36 ){
        printf("ERROR: base must be between 2 and 36\n");
        exit(1);
    }
    printf("Number of elements: ");
    scanf("%i", &count);
    if ( count < 1 ){
        printf("ERROR: array must contain at least 1 element\n");
        exit(1);
    }
    getchar(); /* удалить из потока \n */
    if ( (arr = (long int*)calloc(count, sizeof(long int))) == NULL ){
        printf("ERROR: not enough memory\n");
        exit(1);
    }
    
    printf("Enter %i elements in %d based notation...\n", count, base);
    for ( i = 0; i < count; i++ ){
        do {
            printf("Array[%i] = ", i);
            scanf("%s", buf);
        } while ( parseVal(buf, base, &arr[i]) && printf("Wrong number for this notation!\n") );
    }
    
    printf("\n%d\t%d\n------------------------------------------------------------\n", base, 10);
    for ( i = 0; i < count; i++ ){
        printByBase(arr[i], base);
        printf("\t%d\n", arr[i]);
    }
    
    free(arr);
    arr = NULL;     
    
    return 0;
}
1
28.11.2009, 03:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2009, 03:01
Привет! Вот еще темы с ответами:

Перевод чисел из 10-й в 2-ю систему счисления - C++
Всем привет. Нужна помощь в доработке след.программы: Программа переводит числа из 10-й в 2-ю систему счисления. При вводе...

Перевод в 12-ричную систему счисления - C++
помогите , подскажите как правильно перевести

Перевод в заданную систему счисления - C++
Дано задание: Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число...

Перевод чисел из 10 в 15 систему счисления - C++
Доброго времени суток. Нужно написать программу для перевода введенных с клавиатуры чисел из 10 системы 15 систему счисления, без...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru