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

Проклятые потоки. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Захват видео с web-камеры http://www.cyberforum.ru/cpp-beginners/thread367004.html
Добрый день!Подскажите как лучше всего работать с web-камерой на С++. Какие библиотеки использовать, может есть какие-либо книги или статьи? Хочу реализовать программу которая будет осуществлять захват видео с удаленного хоста..
C++ сравнение значения в файле с вводимым вобщем задача в том чтобы состоялась проверка вводимого значения с содержащимся в файле,как сделать коректно эту проверку, подскажите пожалуйста. p.s. на кучу библиотек и переменных не обращайте внимания, они нужны для реальной работы программы, а не тестовой #include "stdafx.h" #include <stdio.h> #include <math.h> #include <iostream> #include <string.h> using namespace std; //int cool... http://www.cyberforum.ru/cpp-beginners/thread367003.html
C++ Найти радиусы вписанной и описанной окружностей треугольника
Задания для самостоятельной работы 1. Линейный вычислительный процесс 1. Треугольник задан длинами сторон. Найти длины высот. 2. Треугольник задан длинами сторон. Найти радиусы вписанной и описанной окружностей. 3. Хозяин хочет оклеить обоями квартиру. Определить количество необходимых рулонов и затрат на их приобретение. 4. В некотором треугольнике основание больше высоты на заданную...
C++ Решение 2 математических примеров на C++
Помогите решить данные задачи, как можно понятнее. Наградой будет 100 рублей на телефон, конечно маловато но возможности дать больше нет.
C++ запись в файл http://www.cyberforum.ru/cpp-beginners/thread366993.html
у меня есть программа которая использует плагины (20 плагинов) работающих одновременно. каждый плагин имеет свою длл(каждая длл имеет просто другое имя но так они идентичны). плагины пишут в файл при выходе из программы функции запись храняться в длл. char name = "C:\\fc\\name.txt"; char tbuf ;//. char buf ; int fpointer; DWORD err;//. DWORD fcount;
C++ Найти первый вход элемента Задача: найти первый вход элемента массива В в массив А. На входе подаются два массива: массив А и массив В. Требуется вывести индекс массива В, где первый раз встретился похожий элемент. Например: А: 1 2 3 4 5 6 В: 1 2 3 4 5 Выведет ответ 0, т.к. первый вход массива В в массив А это 1, а она на нулевой позиции. Вот моя функция, которая неправильно выводит ответ. подробнее

Показать сообщение отдельно
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.10.2011, 12:07     Проклятые потоки.
CEBEP, читайте в текстовом режиме:

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
136
137
138
139
140
141
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
#include <conio.h>
#include <stdlib.h>
 
#include <ctime>
 
// раскомментировать для вывода хода разбора
// #define DEBUG_OUT
 
enum EState
{
    BLOCK_BEGIN, BLOCK_BODY, BLOCK_BODY_SKIP, BLOCK_OUT,
    BLOCK_STATE_COUNT
};
 
int main()
{
    std::fstream fs( "Scan.unv" );
 
    if( !fs.is_open() )
    {
        std::cerr << "Could not open Scan.unv\n";
        return -1;
    }
 
    EState state = BLOCK_OUT; // состояние парсинга - вне блока
    int block_id; // id текущего блока
    unsigned str_count = 1; // номер строки
    unsigned block_str_count = 1; // номер строки в текущем блоке
 
    std::vector <std::string> data; // сюда будет парситься блок с id == 151
    std::string input; // сюда будет попадать ввод из файла
 
    clock_t parse_start = clock();
 
    for(;std::getline( fs, input );) // пока не достигли конца файла
    {
        #ifdef DEBUG_OUT
        std::cout << '\"' << input << '\"';
        #endif
 
        // если встречена строка -1 в начале или конце блока
        if( (state == BLOCK_OUT || state == BLOCK_BODY || state == BLOCK_BODY_SKIP) && input == "    -1" )
        {
           #ifdef DEBUG_OUT
           std::cout << " - block marker";
           #endif
 
           if( state == BLOCK_OUT ) // если мы вне блока
           {
               #ifdef DEBUG_OUT
               std::cout << " - waiting for block_id";
               #endif
 
               state = BLOCK_BEGIN; // мы в начале блока и ожидаем id блока
               block_str_count = 1; // это первая строка в этом блоке
           }
           else if( state == BLOCK_BODY || state == BLOCK_BODY_SKIP ) // если мы в конце блока
           {
               #ifdef DEBUG_OUT
               std::cout << " - block has ended";
               #endif
 
               state = BLOCK_OUT; // мы вне блока
               block_str_count = 0;
           }
        }
        else if( state == BLOCK_BEGIN ) // если мы в начале блока и ожидаем id блока
        {
            block_id = atoi( input.c_str() ); // читаем id блока
 
            #ifdef DEBUG_OUT
            std::cout << " - block ID (" << block_id << ')';
            #endif
 
            if( block_id == 151 ) // если это наш id
            {
                #ifdef DEBUG_OUT
                std::cout << " - reading";
                #endif
 
                state = BLOCK_BODY; // парсим блок
            }
            else
            {
                #ifdef DEBUG_OUT
                std::cout << " - skipping";
                #endif
 
                state = BLOCK_BODY_SKIP; // иначе пропускаем блок
            }
        }
        else if( state == BLOCK_BODY ) // если мы парсим блок
        {
            #ifdef DEBUG_OUT
            std::cout << " - parsing block " << block_id << " (str " << block_str_count << ')';
            #endif
 
            if( block_id == 151 ) // если это блок 151
            {
                switch( block_str_count )
                {
                    case 3: case 5: case 6: case 8: case 9:
                    data.push_back( input ); // если это нужная нам строка, заносим её в список строк
                    break;
                }
            }
        }
        else if( state == BLOCK_BODY_SKIP ) // если мы пропускаем блок
        {
            #ifdef DEBUG_OUT
            std::cout << " - skipping block " << block_id << " (str " << block_str_count << ')';
            #endif
        }
 
        #ifdef DEBUG_OUT
        std::cout << '\n';
        system( "pause > nul" );
        #endif
 
        str_count++;
        block_str_count++;
    }
 
    fs.close();
 
    clock_t parse_end = clock();
 
    std::cout << "EOF reached in " << parse_end - parse_start << " ms.\n" << str_count << " strings read\n\nData:\n\n";
 
    for( int i = 0; i < data.size(); i++ )
        std::cout << '\"' << data[i] << "\"\n";
 
    std::cout << "--------------------\nTotal: " << data.size() << " strings\n\nGoodbye!\n";
 
    return 0;
}
У меня отработала за 110 мс.

AMD Turion 2.20 GHz, 3GB RAM; gcc без оптимизаций.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru