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

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

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

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

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

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

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

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

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

C++ Перевод из 16-ной 10-ную систему счисления
Перевод в заданную систему счисления C++
C++ Перевод из 10-ой в любую другую систему счисления.
C++ перевод числа в другую систему счисления
C++ Перевод в 9-чную систему счисления
C++ Перевод из десятичной в N систему счисления
Перевод в 12-ричную систему счисления C++
Перевод чисел из 10 в 15 систему счисления C++
Перевод из 10-тичной в 16-ричную систему счисления C++
C++ Перевод чисел из 10-й в 2-ю систему счисления
Реализовать перевод в 16-ричную систему счисления C++
C++ Перевод из 2-ой в 10-ую систему счисления

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

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

Добавлено через 19 секунд
конкретизируйте вопрос
easybudda
Эксперт С++
9452 / 5465 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
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;
}
Можно, конечно, числа и в строках хранить, но хлопотно, да и смысла в этом никакого...
soulofdarkness
1 / 1 / 0
Регистрация: 20.11.2009
Сообщений: 21
27.11.2009, 12:30  [ТС]     Перевод текста в произвольную систему счисления #4
Спасибо огромное. Со всем практически разобрался, но все равно не могу сообразить, как исправить одну ошибку. Если ввести число в неправильной системе счисления, но выдает ошибку, но не переспрашивает элемент =(
easybudda
Эксперт С++
9452 / 5465 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
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;
}
Yandex
Объявления
28.11.2009, 03:01     Перевод текста в произвольную систему счисления
Ответ Создать тему
Опции темы

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