Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 18.06.2010
Сообщений: 42
1

Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк

09.01.2012, 15:06. Просмотров 970. Ответов 1
Метки нет (Все метки)

Л.Р.2
Вариант №5
------------
Разработать программу, осуществляющую ввод двух строк, введенных пользователем. Далее, если обе строки хранят целые числа со знаком, то на экран выводится сумма чисел, в противном случае – конкатенация двух вве-денных строк. Проверку на соответствие строки целому числу, вычисление суммы чисел и конкатенации строк оформить как три разных функции потока. Ввод строк осуществляется до запуска всех потоков, а вывод результатов – после их завершения.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2012, 15:06
Ответы с готовыми решениями:

Если обе строки хранят целые числа, то выводится сумма чисел, в противном случае – конкатенация строк
Т.к я в этом деле вообще новичок, прошу знающих людей пожалуйста помочь мне... Л.Р.1 Вариант №5...

Если обе строки хранят целые числа со знаком, то на экран вывести сумму чисел
Разработать программу, осуществляющую ввод двух строк, введенных пользователем. Далее, если обе...

Если сумма всех цифр 3 числа равна суме чисел 1 и 2го, тогда можно переставляем числа, иначе 0
Помогите с решение. Буду благодарен

Заданы числа x и y. Если их сумма положительная, вывести на экран эти числа, иначе вывести их разницу
Помогите пожалуйста...Заданные числа x и y . Если их сумма положительная , вывести на экран эти...

1
276 / 169 / 21
Регистрация: 10.07.2011
Сообщений: 441
14.01.2012, 05:00 2
Лучший ответ Сообщение было отмечено Homercompany как решение

Решение

Цитата Сообщение от Homercompany Посмотреть сообщение
Л.Р.2
Вариант №5
------------
Разработать программу, осуществляющую ввод двух строк, введенных пользователем. Далее, если обе строки хранят целые числа со знаком, то на экран выводится сумма чисел, в противном случае – конкатенация двух вве-денных строк. Проверку на соответствие строки целому числу, вычисление суммы чисел и конкатенации строк оформить как три разных функции потока. Ввод строк осуществляется до запуска всех потоков, а вывод результатов – после их завершения.
Программа делает что вам надо. Но я не гарантирую что это решение достаточно качественное так как это моя первая прогамма которую я вообще делаю с использовнием потоков. Решил так сказать попробовать потому что никто не отвечает. Надеюсь помог.
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
#include <windows.h>
#include <conio.h>
 
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
#include <cstring>
using std::string;
 
volatile int isSignedInteger = -1;
volatile int firstInt = 0, secondInt = 0, mySum = 0;
volatile char * firstString, *secondString, *resultString;
;
 
void isInteger() {
    while (isSignedInteger == -1) {
        if (firstString[0] != '\0' && secondString[0] != '\0') {
            if (firstString[0] == '-' && secondString[0] == '-') {
                if (isdigit(firstString[1]) && isdigit(secondString[1])) {
                    firstInt = atoi((char *) firstString);
                    secondInt = atoi((char *) secondString);
                    isSignedInteger = 1;
                }
            } else {
                isSignedInteger = 0;
            }
        }
        Sleep(1000);
    }
}
 
void sum() {
    while (mySum == 0) {
        if (firstInt < 0 && secondInt < 0) {
            mySum = firstInt + secondInt;
        }
        Sleep(1000);
    }
}
 
void concat() {
    while (resultString[0] == '\0') {
        if (isSignedInteger == 0) {
            resultString = strcpy((char*) resultString, (char*) firstString);
            resultString = strcat((char*) resultString, (char*) secondString);
        }
        Sleep(1000);
    }
}
 
int main() {
 
    HANDLE hThreadOne;
    DWORD IDThreadOne;
    HANDLE hThreadTwo;
    DWORD IDThreadTwo;
    HANDLE hThreadThree;
    DWORD IDThreadThree;
 
    char firstStr[100], secondStr[100], resultStr[200];
    int summ = 0;
 
    cout << "Please enter first string :: ";
    cin >> firstStr;
    firstString = firstStr;
    cout << "Please enter second string :: ";
    cin >> secondStr;
    secondString = secondStr;
    resultString = resultStr;
    resultString[0] = '\0';
 
    cout << "OPEN THREAD IsINTEGER" << endl;
    hThreadOne = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) isInteger, NULL, 0, &IDThreadOne);
    cout << "OPEN THREAD SUM" << endl;
    hThreadTwo = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) sum, NULL, 0, &IDThreadTwo);
    cout << "OPEN THREAD CONCAT" << endl;
    hThreadThree = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) concat, NULL, 0, &IDThreadThree);
 
    if (hThreadOne == NULL) {
        return GetLastError();
    }
    if (hThreadTwo == NULL) {
        return GetLastError();
    }
    if (hThreadThree == NULL) {
        return GetLastError();
    }
 
    while (true) {
        if(mySum != 0 || strlen(resultStr) > 0 ){
            summ = mySum;
            TerminateThread(hThreadOne, 0);
            CloseHandle(hThreadOne);
            cout << "\nCLOSE THREAD IsINTEGER" << endl;
            TerminateThread(hThreadTwo, 0);
            CloseHandle(hThreadTwo);
            cout << "CLOSE THREAD SUM" << endl;
            TerminateThread(hThreadThree, 0);
            CloseHandle(hThreadThree);
            cout << "CLOSE THREAD CONCAT" << endl;
            break;
        }
        Sleep(500);
    }
 
    if(summ != 0){
        cout << "\nSUMM : " << summ;
    } else {
        cout << "\nCONCAT :: " << resultStr;
    }
 
    cout << "\n\nPlease press enter";
 
    cin.ignore();
    cin.get();
 
    return 0;
}
результат в случае если строки не есть два отрицательных числа

Please enter first string :: string1
Please enter second string :: string2
OPEN THREAD IsINTEGER
OPEN THREAD SUM
OPEN THREAD CONCAT

CLOSE THREAD IsINTEGER
CLOSE THREAD SUM
CLOSE THREAD CONCAT

CONCAT :: string1string2

Please press enter

результат если введены два отрицательных числа

Please enter first string :: -10
Please enter second string :: -28
OPEN THREAD IsINTEGER
OPEN THREAD SUM
OPEN THREAD CONCAT

CLOSE THREAD IsINTEGER
CLOSE THREAD SUM
CLOSE THREAD CONCAT

SUMM : -38
Please press enter
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2012, 05:00

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

Сформировать массив Y(N), где Yi=1, 2...N, есть сумма элементов i-ой строки массива, если она больше хi, иначе yi=xi
Помогите пожалуйста, очень срочно Дан массивы W (N, M) и Х (N), сформировать массив Y(N), где...

Если есть в базе данные, то всё выводится, иначе выводится шаблон, где должны быть данные
если если в базе данные то всё выводится как только их нет то выводится шаблон где должны быть...

Если сумма цифр введенного трехзначного числа кратна трем - увеличить его на 1, иначе уменьшить в 2 раза
Задача: Если сумма цифр введенного трехзначного числа Н кратна трем, то увеличить само число на...

Если сумма цифр введенного трехзначного числа N четная, то увеличить число вдвое, иначе найти сумму N+1N
Если сумма цифр введенного трехзначного числа N четная, то увеличить число вдвое, иначе найти сумму...


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

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

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