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

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

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

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

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

Л.Р.2
Вариант №5
------------
Разработать программу, осуществляющую ввод двух строк, введенных пользователем. Далее, если обе строки хранят целые числа со знаком, то на экран выводится сумма чисел, в противном случае – конкатенация двух вве-денных строк. Проверку на соответствие строки целому числу, вычисление суммы чисел и конкатенации строк оформить как три разных функции потока. Ввод строк осуществляется до запуска всех потоков, а вывод результатов – после их завершения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 15:06     Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк
Посмотрите здесь:
Если обе строки хранят целые числа, то выводится сумма чисел, в противном случае – конкатенация строк C++
Заданы числа x и y. Если их сумма положительная, вывести на экран эти числа, иначе вывести их разницу C++
C++ Разработать функцию, возвращающую сумму первого и второго аргументов, если сумма больше 5, иначе - ноль
C++ Конкатенация строк: Зачем строки создаются в динамической памяти?
С клавиатуры вводятся два числа А и В. Вычислить : А - В, если А > В и С = В - А + 1 - иначе C++
Если строки начинаются с одинаковых символов, напечатать «ДА», иначе –«НЕТ» C++
C++ Если число - куб натурального числа то возвращать true, иначе false
Ввести три числа А,В,С. Удвоить каждое из них если A>=B>=C, иначе изменить зачения А и В C++
Ввести три числа А,В,С. Удвоить каждое из них если A>=B>=C, иначе изменить зачения А и В C++
C++ Если длина строки больше 10 - оставить первые 6 символов, иначе дополнить строку символами 'о'
C++ Определить длину введенной строки L, и если длина L четная, то удаляются 3 первых, иначе 3 последних символа
Даны 3 числа A,B,C, которые вводятся с клавы. Если число А чётное то вывести сумму чисел А,В,С, иначе их произ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.01.2012, 05:00     Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк #2
Цитата Сообщение от 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
Yandex
Объявления
14.01.2012, 05:00     Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк
Ответ Создать тему
Опции темы

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