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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Присвоение словам численных характеристик http://www.cyberforum.ru/cpp-beginners/thread625414.html
Есть 100 различных слов. Каждому слову надо присвоить 7 целых численных характеристик в диапазоне от 0 до 4 включительно. Как наиболее оптимально организовать символьный массив и присвоить ему численные значения ?
C++ Нужно вывести на экран график по массиву из заданных координат Здравствуйте! Нужно вывести на экран график по массиву из заданных координат x и y. Сделать это нужно в консольном приложении visual c++. С выводом графиков сталкиваться еще не приходилось, поэтому понятия не имею, как это сделать. Литература, найденная с помощью гугла толком не помогла.. :gsad: Если кто уже сталкивался с подобной задачей, либо просто готов помочь..буду благодарна :gsmile: http://www.cyberforum.ru/cpp-beginners/thread625398.html
Мнимая единица C++
Здравствуйте! Кто сможет подсказать? Есть пример из маткада. Как этот пример написать на С++? Меня интересует, как объявить мнимую единицу или задать, чтобы можно было вывести на экран реальные и мнимые выражения, как в маткаде.
C++ Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс TMyClass; создаются объектыp1=new TButton(NULL); p2=new TMyClass();нужно ли для корректного удаления этих объектов выполнять явное приведение типа? т.е. являются ли корректными записиdelete p1; delete p2;или обязательно нужноdelete (TButton*)p1; delete (TMyClass*)p2;Среда RAD Studio XE под Win7,...
C++ Найти минимальный элемент в массиве http://www.cyberforum.ru/cpp-beginners/thread625320.html
Подскажите пожалуйста. 1.h: int* MyMin(int* p2,const int (size)) /*????*/ //int* (*MyMin) (int(*p2), int size) { //T* el = array; int min = p2; for (int i = 0; i < size; i++) {
C++ Удалить цифру из записи дано натуральное число n, Удалить из записи число цифру 0 и 5. оставив преждный порядок остальных цифр подробнее

Показать сообщение отдельно
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.01.2012, 05:00     Функции потока: Если строки хранят числа, то выводится сумма, иначе – конкатенация строк
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru