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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Максимум в массиве http://www.cyberforum.ru/cpp-beginners/thread65511.html
Найти максимум в массиве иего положение Добавлено через 1 минуту #include <iostream> using namespace std; int main() { int n; double array; int i, imax(0), imin(0);
C++ Матрица Доброе время суток. Создавая матрицу возникли небольшие не понятие ... Данный код выведет примерно такую матрицу... (8 это не значение, а как бы уголок матрицы) 8123 0000 0000 0000 как... http://www.cyberforum.ru/cpp-beginners/thread65510.html
Вычисление с заданной точностью C++
Помогите пожалуйста решить задачу на С++. Даны положительные действительные числа А, Х, Е(epsilon). В последовательности У1,У2,... ,образованной по закону У0=А; Уi=1/2(Уi-1 +Х/Уi-1) ,...
C++ Вычисление с заданой точностью
Помогите пожалуйста решить задачу на С++. Даны положительные действительные числа А, Х, Е(epsilon). В последовательности У1,У2,... ,образованной по закону У0=А; Уi=1/2(Уi-1 +Х/Уi-1) ,...
C++ Отрицательный числа в rand() http://www.cyberforum.ru/cpp-beginners/thread65479.html
Как?
C++ return массив Доброе время суток. У меня такой вопрос есть функция, она генерирует массив, как теперь вернуть этот массив, что бы потом использовать в основной функции. Моя функция вернет только 1 элемент... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9662 / 5611 / 952
Регистрация: 25.07.2009
Сообщений: 10,774
28.11.2009, 03:01
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru