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

Вопрос про удаление символа с определенной позиции в строке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Даны положительные x, y, z. Выяснить, существует ли треугольник http://www.cyberforum.ru/cpp-beginners/thread384563.html
Даны положительные x, y, z. Выяснить, существует ли треугольник с длинами сторон х, у, z. Ответ получить в текстовой форме: "существует" или "не существует".
C++ В чем проблемка? Сделал метод итерации, но програма после компиляции как бегущая строка... в чем ошибка програми? #include <iostream.h> #include <conio.h> #include <math.h> int main() { int k=0; float eps,x1,xn1,x2,xn2,x3,xn3; cout<<"Vvedit x1="; cin>>x1; http://www.cyberforum.ru/cpp-beginners/thread384561.html
Вводится последовательность из N целых чисел. Сформировать последовательность, C++
Вводится последовательность из N целых чисел. Сформировать последовательность, каждый элемент которой равен сумме цифр исходной последовательности. Найти сумму цифр в сформированной последовательности (функцией оформить определение суммы цифр числа).
Имеется кусок ткани длиной М метров. От него последовательно отрезаются куски разной длины C++
Имеется кусок ткани длиной М метров. От него последовательно отрезаются куски разной длины. Все данные по использованию ткани заносятся в компьютер. Компьютер должен выдать сообщение о том, что материала не хватает, если будет затребован кусок ткани, большей длины, чем имеется. на с++
C++ Создать бинарный файл f и записать в него целые числа http://www.cyberforum.ru/cpp-beginners/thread384551.html
Создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла и его обработку: Найти все не четные числа и их сумму.
C++ Упорядочен ли массив (из файла) Добрый вечер, ломаю голову над вопросом и взываю к вашей помощи. Помогите с программой: "Написать программу, которая считывает линейный массив из файла, выводит его на экран и определяет, упорядочен ли он по возрастанию." Есть похожая программа, задача которой "сводится к тому же, но массив мы задаем сам (а не читаем из файла:" #include <algorithm> #include <iostream> #include <numeric>... подробнее

Показать сообщение отдельно
lagg
0 / 0 / 0
Регистрация: 30.03.2011
Сообщений: 6
15.11.2011, 18:41     Вопрос про удаление символа с определенной позиции в строке
Дано задание по многопоточным потокам в си. Есть разделяемая переменная F типа str, если нажата клавиша от 1 до 9, то происходит стирание символа в позиции N, а если нажата alt+(от 1 до 9), то Восстановление символа в позиции N.
Так же дан пример работы, но он дан для типа int :
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
// при нажатии "1" -> F=F+1 (операция 1)
// при нажатии "0" -> F=F-1 (операция 2)
#include <windows.h>
#include <conio.h>
#include <iostream.h>
#include <time.h>
HANDLE hThread;  // дескриптор создаваемого потока
DWORD IDThread;  // идентификатор потока
DWORD ThreadProc(struct log *p); // функция потока (параметр - 
                         // указатель на структуру log)
int F=0;             // разделяемая глобальная переменная
clock_t wtime=100;   // время задержки (мс)
void waiting(clock_t dt); // функция задержки
// Журнал 
struct log {
   int nom;     // порядковый номер операции
   int key;     // код нажатой клавиши
   DWORD ID;        // идентификатор созданного потока
   clock_t t1;  // время начала операции
   clock_t t2;  // время завершения операции
   int F;       // результат операции в дочернем потоке 
   int Fc;      // результат операции главном потоке 
                // (переменная-дублер) 
} mylog[1000];   // не более 1000 строк в журнале
 
//=================================================
int main()  // главный поток
{
  int i=0;      // счетчик операций
  int j=1;      // счетчик вывода строк журнала 
  int key=1;        // код нажатой клавиши
  int flag=1;   // признак завершения программы 
  int Fcontr;   // переменная-дублер
  mylog[1].t2=0; // признак того, что поток не завершен
  Fcontr=F;
 
// повторять пока flag !=0 или i<1000
while (flag || i >=1000)
{
//Прием кода нажатой клавиши
if (kbhit()!= 0)
 {
    key= getch();
    // формирование переменной-дублера
    if (key == 48) Fcontr=--Fcontr; 
        else  Fcontr=++Fcontr;          
//Проверка кода нажатой клавиши
switch (key)
  {
  case 27 : {flag=0; break;} // признак выхода из 
                            // программы (Esc)
  case 48 :     // нажата клавиша "0"   
  case 49 :         // нажата клавиша "1"
      {
          i=++i; //следующая операция           
        // формируем строку журнала          
          mylog[i].nom=i;
          mylog[i].key=key;
          mylog[i].t2=0;
          mylog[i].F=0;
          mylog[i].Fc=Fcontr;
          mylog[i].t1=clock();
// создание потока без немедленного запуска
hThread= CreateThread(NULL,0,ThreadProc,&mylog[i],CREATE_SUSPENDED,&IDThread);
        if (hThread == NULL)
            { cout << "Thread error" << key << endl;
            getch();
            return 0;
         }
    else
            {
   // запуск потока       
   mylog[i].ID=IDThread;
   ResumeThread(hThread);
        }
     }
   }
 }
// завершение работы потока проверяется по 
// сформированному в функции 
// потока значению времени t2
 if (mylog [j].t2!=0)
     {
// вывод j-й строки журнала     
cout << j << "  " << mylog[j].key << "  " << mylog[j].ID << "  " << mylog[j].t1 << "  " << mylog[j].t2 << "  " << mylog[j].F << "  " << mylog[j].Fc <<endl;
     j=++j;   // следующая строка журнала
     }
} // повторять пока flag !=0 или i<1000
  getch();
  return 0;
}
 
// функция потока: имитация "чтения", корректировки 
// и "записи" разделяемой переменной F
// параметр - указатель на текущую строку журнала 
DWORD ThreadProc(log *p)
{
int Fbuf;    
// чтение разделяемой переменной в буферную переменную 
Fbuf=F;
waiting(wtime);  // задержка
// корректировка буферной переменной
if ((*p).key == 48) Fbuf=--Fbuf;
        else  Fbuf=++Fbuf;
waiting(wtime);  // задержка
// запись из буферной переменной в разделяемую переменную
F=Fbuf;
// запись результата в текущую строку журнала
 (*p).F=F;
 (*p).t2=clock(); // время окончания работы потока
return 0;
}
 
// функция задержки
// параметр - время задержки в мс
void waiting(clock_t dt) {
clock_t tn;
tn=clock();
while (clock()-tn < dt); 
return;
}
а вот как написать программу для моего задания?

PS. вот начало моей работы, правда не уверен, что делаю правильно
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
#include <windows.h>
#include <conio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
HANDLE hThread;  // дескриптор создаваемого потока
DWORD IDThread;  // идентификатор потока
DWORD ThreadProc(struct log *p); // функция потока (параметр - 
                         // указатель на структуру log)
char F[12]="Hello world!";     // разделяемая глобальная переменная
clock_t wtime=100;   // время задержки (мс)
void waiting(clock_t dt); // функция задержки
// Журнал 
struct log {
      int nom;      // порядковый номер операции
   int key;     // код нажатой клавиши
   DWORD ID;        // идентификатор созданного потока
   clock_t t1;  // время начала операции
   clock_t t2;  // время завершения операции
   char F;      // результат операции в дочернем потоке 
   char Fc;     // результат операции главном потоке 
                // (переменная-дублер) 
} mylog[1000];   // не более 1000 строк в журнале
int k;
//=================================================
int main()  // ГЈГ«Г*ГўГ*ûé ïîòîê
{
  int i=0;      // счетчик операций
  int j=1;      // счетчик вывода строк журнала 
  int key=1;        // код нажатой клавиши
  int flag=1;   // признак завершения программы 
  char Fcontr;  // переменная-дублер
  mylog[1].t2=0; // признак того, что поток не завершен
  Fcontr=F;
 
// повторять пока flag !=0 или i<1000
while (flag || i >=1000)
{
//Прием кода нажатой клавиши
if (kbhit()!= 0)
 {
    key= getch();
    // формирование переменной-дублера
    if (key >= 49 && key<=57) Fcontr=--Fcontr;
        else  Fcontr=++Fcontr;
//Проверка кода нажатой клавиши
switch (key)
  {
  case 27 : {flag=0; break;} // признак выхода из 
                            // программы (Esc
  case 49 :     // Нажата клавиша "1"
  case 50 :         // Нажата клавиша "2"
  case 51 :         // Нажата клавиша "3"
  case 52 :         // Нажата клавиша "4"
  case 53 :         // Нажата клавиша "5"
  case 54 :         // Нажата клавиша "6"
  case 55 :         // Нажата клавиша "7"
  case 56 :         // Нажата клавиша "8"
  case 57 :         // Нажата клавиша "9"
Заранее спасибо кто поможет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru