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

Вопрос о строке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подсчет количества обменов и сравнений в алгоритмах сортировки http://www.cyberforum.ru/cpp-beginners/thread167879.html
Помогите как в алгоритмах сортировки: простыми включениями (простой вставкой),методом пузырька определить - определение числа сравнений; - определение числа обменов; - определение суммы обменов и сравнений; Если можно напишите код .Заранее благодарен... Дуляж тем запрещен правилами форума (п. 3.4). Не плодите одинаковые темы!
C++ Составить программу "Телефонный справочник" Составить программу "Телефонный справочник", которая имеет меню: 1 Добавление 2 Поиск 3 Завершение работы Команда "Добавление" дописывает в файл имя, фамилию и номер телефона абонента. Если файла на диске нет, то программа должна создать его. В файле информация о каждом абоненте находится в отдельной строке. Команда "Поиск" должна запрашивать фамилию человека и выводить его телефон.... http://www.cyberforum.ru/cpp-beginners/thread167858.html
Динамический объект не содержит в себе линамических членов. Удалять ли его? C++
Собственно в теме весь вопрос) Непонятно, нужно ли вызывать delete для динамического объекта если его деструктор пустой так как все его члены принадлежат к автоматическому классу хранения.
ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр. C++
Написать программу, осуществляющую ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр. Подключить стандартные библиотеки (библиотека стандартного ввода-вывода <stdio.h>, библиотека потокового ввода-вывода <ios-tream.h>, библиотека функций управления текстовым экраном <conio.h>, библиотека математических функций <math.h>, библиоте-ка стандартных функций <stdlib.h>).
C++ Вывести случайный элемент массива со значением 1 http://www.cyberforum.ru/cpp-beginners/thread167803.html
Такая штука: нужно вывести рандомный элемент массива, значение которого = 1. Ищу для этого в цикле рандомные значения строки/столбца и сравниваю элемент с 1. Естественно это плохо, т.к. с помощью rand() постоянно выводятся повторяющиеся значения, и для обработки, например, массива 100x100 может случится до 40.000 проходов. Вот код: int main() { #include <iostream.h> const int n...
C++ На сколько дней студенту хватит стипендии S, если он тратит N руб. в день и его расходы увеличиваются в X раз? На сколько дней студенту хватит стипендии S, если он тратит N р. в день и его расходы каждый день увеличиваются в X раз? подробнее

Показать сообщение отдельно
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
22.09.2010, 21:10  [ТС]     Вопрос о строке
Цитата Сообщение от easybudda Посмотреть сообщение
(с) М. Булгаков.
Как-то там у Вас не просто всё... Приведите пример входных данных и результатов действий с ними. Кстати, примеров классов комплексных чисел на форуме много. Вот совсем недавно было: Структур комплексных чисел
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
int main(int argc, char* argv[])
{
    char str [80];
    char s [80];
    unsigned int action;
    int ch = 0;
    ComNum o;
 
    cout.width(strlen("Examples of the expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_1(str);
    
    strcpy(s,str);
 
    cout<<"Enter the 2d expression: ";
    cin.getline(str,79);
    ComNum num_2(str);
 
    while(!ch)
    {
        system("cls");
        cout<<"\nOperations:\n";
        cout<<"Summing up - 1\n";
        cout<<"Distracting - 2\n";
        cout<<"Multiplying - 3\n: ";
        cin>>action;
 
        switch(action)
        {
        case 1:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 + num_2;
            o.Show();         
            ch = 1;
            break;
        case 2:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 - num_2;
            o.Show();
            ch = 1;
            break;
        case 3:
            cout<<"First expression: "<<s<<endl<<"Second expression: "<<str<<endl;
            o = num_1 * num_2;
            o.Show();
            ch = 1;
            break;
 
        default:
            MessageBox(NULL,"Enter 1, 2 or 3!","Attention!",MB_OK|MB_ICONINFORMATION);
            break;
        }
        
        cout<<"2 - continue, any key - exit\n";
        cin>>ch;
        if (ch != 2)
            exit(1);
        else
            ch = 0;
    }
 
    return 0;
}
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
ComNum::ComNum(char str[])
{
    len = strlen(str) - 1;
    int i = 0, k = 0;
    bool flag = true;
    char *s;
    
    ////////////exceptions////////////
    try
    {
        while (isdigit(*(str+i)) || *(str+i) == 'i' || *(str+i) == '-' || *(str+i) == '+')
            i++;
        if (i != len+1 || !str)
            throw 0;
    }
    catch(int)
    {
        MessageBox(HWND_DESKTOP,"You've entered a wrong expression!","Attention!",MB_OK|MB_ICONERROR);
        exit(1);    
    }
 
    i = 0;
    while(str[i] != '\0')
    {    
        if (str[i] == '+')
            break;
        else 
            if(str[i] == '-')    
            {
                flag = false;
                break;
            }
        str[i];
        i++;
    }
 
    ///not full-fledged number///
    if((unsigned)i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        do
        {
            if (str[k] == 'i')
                break;
            i++;
        }while(str[k++] != '\0');
 
        if((unsigned)--i != strlen(str)) // number consits only from im part
            Rl = 0.0; 
        else
            Im = 0.0; // number consits only from real part
    
    
        if (Rl == 0.0)
        {
             s = new char [k+1];
             if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
 
            for (i = 0; i < k+1; i++)
                s[i] = str[i];
            if (!flag)
                Im = -atof(s);
            else 
                Im = atof(s);
 
            delete [] s;
        }
        else
            Rl = atof(str);
    }
    /////////////////////////////
 
 
 
    ///full-fledged number///
    k = 0;
 
    for (i = len; i >= 0; i--)
    {
        if (str[i-1] == '+' || str[i-1] == '-')
        {
            int tmp = i;
            s = new char [len-i]; // len - 1 -> 'i' - eliminated 
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            
            while (str[i] != 'i')
                s [k++] = str[i++];
            if (!flag)
                Im = -atof(s);
            else
                Im = atof(s);
            delete [] s;
 
            s = new char [tmp];
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            for (i = 0; i < tmp; i++)
                s [i] = str[i];
            Rl = atof(s);
            delete [] s;
        }
    }
    ///////////////////////// 
}
 
ComNum ComNum::operator +(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl + ob.Rl;
    tmp.Im = Im + ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator -(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl - ob.Rl;
    tmp.Im = Im - ob.Im;
    
    return tmp;
}
Вопрос о строке

Вопрос о строке

Прочитал указанную в ссылке тему. Да, всё отлично, но в этой программе пользователь может вводить ,так сказать, "сразу". Думаю, что это более изысканный вариант ввода комплексного числа. Согласен, код не можно, а нужно упростить
Но всё же, всё работает, кроме одной маленькой "заразы". В main() есть следующий фрагмент:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       
.........
 default:
            MessageBox(NULL,"Enter 1, 2 or 3!","Attention!",MB_OK|MB_ICONINFORMATION);
            break;
        }
        
        cout<<"2 - continue, any key - exit\n";
        cin>>ch;
        if (ch != 2)
            exit(1);
        else
            ch = 0;
    }
 
    return 0;
После работы "default" выводится строка "2 - continue, any key - exit", но пропускаются операторы, следующие после неё. Как этого избежать? p.s. пробовал cout<<flush;
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru