Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 30.03.2011
Сообщений: 6
1

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

15.11.2011, 18:41. Показов 1696. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано задание по многопоточным потокам в си. Есть разделяемая переменная 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"
Заранее спасибо кто поможет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2011, 18:41
Ответы с готовыми решениями:

Удаление от символа до символа с заданной позиции
Здравствуйте, подскажите как удалить из файла строку от символа до символа с заданной позиции...

Удалиние в строке символов в определенной позиции
Здравствуйте. Такая задача: есть переменная типа AnsiString, в которой храниться к примеру путь...

Вопрос про позиции, рамки и таблицы
Приветствую! Может кто подскажет как решить проблемку: необходимо окно разбить на 2 части, в...

Поиск позиции символа в строке
Здравствуйте, у меня есть строка со словом и строка с прочерками (--------), длина у них...

0
15.11.2011, 18:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2011, 18:41
Помогаю со студенческими работами здесь

Найти все позиции символа в строке
Написать функцию определяющую все позиции символа в строке. На вход подается строка и символ,...

Найти номер позиции символа 'f' в строке S
'ASCII (American Standard Code far Information Interchange)' Найти номер позиции символа 'f' в...

Поиск последней позиции символа в строке
Есть строка, в нее получаю путь к файлу, нужно обрезать до имени, следовательно нужно искать...

Вопрос про код символа
Такая задача: составить программу, которая запрашивает у пользователя символ, а потом выводит на...

Найти номер позиции заданного символа в строке
нужна помощь и напишите коменты к каждой строке плиз Написать метод, входными параметрами...

Вернуть номер позиции заданного символа в строке
Написать метод, входными параметрами которого являются строка, символ. Метод должен вернуть номер...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru