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

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

Войти
Регистрация
Восстановить пароль
 
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
#1

Сформировать одномерный массив - C++

03.11.2009, 16:59. Просмотров 848. Ответов 12
Метки нет (Все метки)

Из строки типа "Привет 123й, я 548й, нам нада передать 17му что его балан равен 100". Вывести все числа(не цифры, а

числа). Сформировать одномерный массив. Отсортировать его по убыванию, возростанию, найти максимальный и минимальный

элемент. В конце вывести среднее арифметическое элементов масива.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2009, 16:59     Сформировать одномерный массив
Посмотрите здесь:

C++ Сформировать результирующий одномерный массив
Сформировать одномерный массив целых чисел C++
C++ Сформировать одномерный массив Х из элементов матрицы А...
Сформировать одномерный массив C++
C++ Сформировать одномерный массив
C++ сформировать одномерный массив по условию
На основе матрицы сформировать одномерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 17:54     Сформировать одномерный массив #2
Записываете строку в массив. Далее при помощи фунции, определяющей, является ли передаваемый ей аргумент цифрой или буквой, выявляете индексы элементов в массиве, где записаны цифры. Для удобства их можно сразу забить в другой массив (не обязательно). Далее, определив длину каждого из промежутков, вы сможете при помощи банального умножения (например, для числа 123: 1*100 + 2*10 + 3*1) получить искомые числа. Можно кстати, воспользоваться для этой цели готовой функцией.
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
03.11.2009, 19:42  [ТС]     Сформировать одномерный массив #3
А можно уже решённый вариант увидеть))

Добавлено через 1 час 20 минут
up
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 20:00     Сформировать одномерный массив #4
Напишите лучше конкретно, какой момент в моем кривом алгоритме вызывает у вас затруднения, а я подскажу .
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
03.11.2009, 20:13  [ТС]     Сформировать одномерный массив #5
C++
1
2
3
4
 char *c1 = "Welcome to the 123rd";
  char *c2 = "I 548y";
  char *c3 = "we need to allocate 17mu";
  char *c4 = "that his balance is 100";
Вот из этого выведи все числа и присвой им какой нибудь операнд. Дальше я сам)
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 21:22     Сформировать одномерный массив #6
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
#include <iostream>
using namespace std;
 
bool charornot (char ch) { // проверка буква ли это или цифра
    char mas[] = {"1234567890"};
    int i, flag = 0;
    for ( i = 0; i < 10; i++ )
        if ( ch == mas[i] ) {
            flag = 1;
            break;
        }
    if ( flag == 0 )
        return false;
    else
        return true;
}
 
int power (int p) { // для вычисления
    int i, j = 1;
    for ( i = 0; i < p; i++ )
        j *= 10;
    return j;
}
 
int figure2number (char ch) { // преобразует char-овскую "цифру" в настоящую int-овскую цифру
    switch (ch) {
        case '1': return 1; break;
        case '2': return 2; break;
        case '3': return 3; break;
        case '4': return 4; break;
        case '5': return 5; break;
        case '6': return 6; break;
        case '7': return 7; break;
        case '8': return 8; break;
        case '9': return 9; break;
        case '0': return 0; break;
        default: return -1; break;
    }
}
 
int sum (char mas[], int size) { // переводит тестовую строку с цифрами (буквами) в число
    int sum = 0, i;
    for ( i = 0; i < size; i++ )
        sum += figure2number(mas[i]) * power(size-i-1);
    return sum;
}
 
int main (int argc, char * const argv[]) {
    char * c1 = "We12lcome 0 999999 to the 123rd11 22";
    int i, j, c, h = 0, lengh = strlen(c1);
    const int size = lengh;
    int index[size];  // массив для индексов
    char mas1[size]; // массив для "числа", представленного char-овскими цифрами
    int answer[size]; // массив для ответа
    
    for ( i = 0; i < lengh; i++ ) {
        if ( charornot(c1[i]) == false )
            continue;
        else {
            j = 0;
            while ( charornot(c1[i]) == true ) {
                index[j] = i; // записали индекс цифры
                j++;
                i++;
                }
            for ( c = 0; c < j; c++ )
                mas1[c] = c1[index[c]]; // записали сюда одно лишь char-овское "число"
            answer[h] = sum(mas1,j); // положили сюда настоящее int-овское число
            h++;
        }
    }
    for ( i = 0; i < h; i++ )
        cout << answer[i] << endl;
    return 0;
}
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
03.11.2009, 22:03  [ТС]     Сформировать одномерный массив #7
C++
1
2
3
int index[size];  
        char mas1[size]; 
        int answer[size];
Arrays must be declared with constant size.
This error is commonly caused by misspelling a #define constant.
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 22:10     Сформировать одномерный массив #8
Черт, знаю, что нужно прописывать константу в качестве размерности, но почему-то в моем компиляторе и так сработало . Используй либо динамический массив значит, либо вместо size для этих трех массивов пропиши какую константу заранее определенную. Например, так:
C++
1
2
3
4
const int sizeformas = 256;
int index[sizeformas];  
char mas1[sizeformas]; 
int answer[sizeformas];
ByHbKa
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
03.11.2009, 22:28  [ТС]     Сформировать одномерный массив #9
Благодарю, все работает
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
03.11.2009, 22:33     Сформировать одномерный массив #10
audiophile,
это было ж0стко. особенно функция figure2number меня впечатлила
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 22:41     Сформировать одномерный массив #11
Цитата Сообщение от Rififi Посмотреть сообщение
audiophile,
это было ж0стко. особенно функция figure2number меня впечатлила
Да. Я полный чайник и не скрываю этого. Мало того, что алгоритмы у меня очень нерациональные, еще и реализация хромает. В данном случае я писал не для себя, а потому код как лился из головы, так и был записан . Хотя, суть изложена в первом предложении.

P.S. Еще в голову одновременно с этим пришло использовании функции atoi(), которая бы все сама сделала и не надо было бы писать sum, figure2number, power, но решил все расписать как сам бы делал, не будь ее в наличии . А что именно впечатлило? Ненужные break? Ну так это я так...
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
03.11.2009, 22:56     Сформировать одномерный массив #12
audiophile,
А что именно впечатлило?
мне просто сразу вспомнился явный и безоговорочный лидер проекта ГовноКод: http://govnokod.ru/best?time=ever
, без обид.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2009, 23:02     Сформировать одномерный массив
Еще ссылки по теме:

C++ Сформировать одномерный массив по арифметическим выражениям
Сформировать одномерный массив из 15 простых чисел C++
Сформировать одномерный массив из двумерного C++
Сформировать одномерный массив X из сумм C++
C++ Сформировать одномерный массив

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

Или воспользуйтесь поиском по форуму:
audiophile
9 / 9 / 0
Регистрация: 01.11.2009
Сообщений: 67
03.11.2009, 23:02     Сформировать одномерный массив #13
Ну мне еще и до говнокодера далеко, но до того, что там в ТОПе даже я бы не додумался .
В том, что я написал только break, вроде, лишние, т.к. после return уже ничего не выполняется. А так я же говорю: пишу первое, что придет в голову. Вот, например, еще один вариант этой функции пришел в голову:
C++
1
2
3
4
5
6
int figure2number (char ch) { // преобразует char-овскую "цифру" в настоящую int-овскую цифру
    char mas[] = {"0123456789"};
    for ( int i = 0; i < 10; i++ )
        if ( ch == mas[i] )
            return i;
}
Я же не на выставку делаю . Ну и т.д.

C++
1
2
3
4
5
6
7
8
bool charornot (char ch) { // проверка буква ли это или цифра
        char mas[] = {"1234567890"};
        int i, flag = 0;
        for ( i = 0; i < 10; i++ )
                if ( ch == mas[i] )
                   return true;
        return false;
}
А вообще я бы тут atoi() заюзал .
Yandex
Объявления
03.11.2009, 23:02     Сформировать одномерный массив
Ответ Создать тему
Опции темы

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