Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Kirill Losev
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
#1

последовательность "пила" - C++

08.02.2012, 22:39. Просмотров 832. Ответов 3
Метки нет (Все метки)

помогите, пожалуйста, написать код, который бы помог мне в решении этой >>>>>http://www.cyberforum.ru/cpp-beginners/thread441841.html<<<<< задачи
честно уже 3 дня мучаю, но ничего не получается. точнее получается, но не правильно

вот все мои попытки:

Попытка 1:
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
#include <iostream>
#include <fstream>
using namespace std;
 
void mission()
{
 cout << "Задание: \tВывести на экран количество отрезков с заданным свойством "
      << endl << "\t\tf: сигма1(Z) -> N0. Свойство - \"пилообразный\", т.е. "
      << endl << "\t\tкаждый элемент является строгим локальным минимумом "
      << endl << "\t\tили максимумом."; 
}
 
void test()
{
 float x;
 cout << endl << "Последовательность: ";
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 while(true)
 {
  input >> x;
  if(!input.eof())
  {
   cout << x << " ";  
  }  
  else 
   break;
 }  
}
 
 
void processing()
{
 float x,
       v = 0,
       c = 0;
 int col_s = 0;
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 
 ofstream output("/media/wind/forlabs/2_sem/l1/output.txt");
 output << "| x |      кол-во элементов       |";
 
 while(!input.eof())
 {
  int col_e = 0;
  input >> x;
   {
    v = x;
    col_e++;
    output << endl << "| " << x << " |    " << col_e << "|";
   }
  input >> x;
   {
    if((x > v)||(x < v))
    {
     c = x;
     col_e++;  
     output << endl << "| " << x << " |    " << col_e << "|"; 
    }
   }
  while(!input.eof())
  {
   input >> x;
   {
    if((c > v)&&(c > x))
    {
     v = x;
     col_e++;
     output << endl << "| " << x << " |    " << col_e << "|";
    }
    if((c < v)&&(c < x))
    {
     v = x;
     col_e++;
     output << endl << "| " << x << " |    " << col_e << "|";  
    }
    else
    {
     col_s++;
     output << " отрезок закончен ";
     break;
    }
   }
   input >> x;
    {
     if((v < c)&&(v < x))
     {
      c = x;
      col_e++;
      output << endl << "| " << x << " |    " << col_e << "|";
     }
     if((v > c)&&(v > x))
     {
      c = x;
      col_e++;
      output << endl << "| " << x << " |    " << col_e << "|";  
     }
     else
     {
      col_s++;
      output << endl << "| " << x << " |    " << col_e << "|"
             << endl << "        отрезок закончен ";
      break;
     }
    }  
  }
 } 
output << endl << "Количество отрезков: " << col_s;
cout << endl << "Количество отрезков: " << col_s;
output.close();
input.close();
}
 
int main()
{
  mission();
  test();
  processing();
return 0;
}
Попытка 2:
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
#include <iostream>
#include <fstream>
using namespace std;
 
void mission()
{
 cout << "Задание: \tВывести на экран количество отрезков с заданным свойством "
      << endl << "\t\tf: сигма1(Z) -> N0. Свойство - \"пилообразный\", т.е. "
      << endl << "\t\tкаждый элемент является строгим локальным минимумом "
      << endl << "\t\tили максимумом."; 
}
 
 
 
void processing(int *col_s)
{
 float x,
       v = 0,
       c = 0;
 *col_s = 0;
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 
 ofstream output("/media/wind/forlabs/2_sem/l1/output.txt");
 output << "| x |      кол-во элементов       |";
 
 while(!input.eof())
 {
  int col_e = 0;
  input >> x;
   v = x;
   col_e++;
   output << endl << "| " << x << " |    " << col_e << "|";
  input >> x;
   if(x != v)
   {
    c = x;
    col_e++;  
    output << endl << "| " << x << " |    " << col_e << "|"; 
   }
   else
   {
    output << endl << "| " << x << " |    " << col_e << "|"
           << endl << "| отрезок закончен |"; 
    break;  
 
  while(!input.eof())
  {
   input >> x;
   if(((c > v)&&(c > x))||((c < v)&&(c < x)))
   {
    v = x;
    col_e++;
    output << endl << "| " << x << " |    " << col_e << "|"; 
   }
   else
   {
    output << endl << "| " << x << " |    " << col_e << "|"
           << endl << "| отрезок закончен |";
    *col_s++;
    break;
   }
   input >> x;
    if(((v < c)&&(v < x))||((v > c)&&(v > x)))
    {
     c = x;
     col_e++;
     output << endl << "| " << x << " |    " << col_e << "|";   
    }
    else
    {
     output << endl << "| " << x << " |    " << col_e << "|"
            << endl << "|        отрезок закончен |";
     *col_s++;  
     break;
    }
  }
  } 
output << endl << "Количество отрезков: " << *col_s;
output.close();
input.close();
}
 
 
 
int main()
{
  int col=0;
  mission();
  processing(&col);
  cout << endl << "Loading... Результат работы программы расположен по адресу "
       << endl << "/media/wind/forlabs/2_sem/l1/output.txt";
  cout << endl << endl << "Программа завершила работу."<< endl <<"Количество отрезков: " << col <<endl<<"Можете закрыть консоль.";
return 0;
}
Попытка 3:
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
142
143
#include <iostream>
#include <fstream>
using namespace std;
 
 
 
void test()
{
 float x;
 
 cout << "Последовательность: ";
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 while(true)
 {
  input >> x;
  if(!input.eof())
  {
   cout << x << " ";     
  }
  else
  {
   break;  
  }
 }  
}
 
 
 
void processing()
{
 float now = 0, 
       v = 0,
       c = 0;
 int col_e = 0,
     col_s = 0;
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 ofstream output("/media/wind/forlabs/2_sem/l1/output.txt");
 
 cout << endl << "| x | кол-во элементов |";
 output << "| x | кол-во элементов |";
 
 while(true)
 {
  col_e = 0;
  input >> now;
   if(!input.eof())
   {
    v = now;
    col_e++;   
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";
   }     
   else
   {
    cout << endl << " >>>> не отрезок <<<<< ";
    output << endl << " >>>> не отрезок <<<<< ";
    continue;   
   }
  input >> now;
   if(!input.eof())
   {
    if(v != now)
    {
     c = now;
     col_e++;
     cout << endl << "| " << now << " | " << col_e << " |";
     output << endl << "| " << now << " | " << col_e << " |";   
    }   
    else
    {
     cout << endl << " >>>>> не отрезок <<<<< ";
     output << endl << " >>>>> не отрезок <<<<< ";
     continue;  
    }
   } 
   else
   {
    break;   
   } 
  
  while(true)
  {
   input >> now;
    if(!input.eof())
    {
     if(((c<v)&&(c<now))||((c>v)&&(c>now)))
     {
      col_e++;
      cout << endl << "| " << now << " | " << col_e << " |";
      output << endl << "| " << now << " | " << col_e << " |";  
      v = now; 
     }  
     else
     {
      col_e++;
      col_s++;
      cout << endl << "| " << now << " | " << col_e << " |"
           << endl << " >>>>> конец отрезка <<<<<< ";
      output << endl << "| " << now << " | " << col_e << " |"
             << endl << " >>>>> конец отрезка <<<<<< ";
      continue;  
     }
    }
    else
    {
     break; 
    }
   input >> now;
    if(!input.eof())
    {
     if(((v>c)&&(v>now))||((v<c)&&(v<now)))
     {
      col_e++;
      cout << endl << "| " << now << " | " << col_e << " |";
      output << endl << "| " << now << " | " << col_e << " |";  
      c = now; 
     }  
     else
     {
      col_e++;
      col_s++;
      cout << endl << "| " << now << " | " << col_e << " |"
           << endl << " >>>>> конец отрезка <<<<<< ";
      output << endl << "| " << now << " | " << col_e << " |"
             << endl << " >>>>> конец отрезка <<<<<< ";
      continue;  
     }
    }
    else
    {
     break; 
    }   
  }
 }  
}
 
 
 
int main()
{
 test();
 processing();  
}
Попытка 4:
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
#include <iostream>
#include <fstream>
using namespace std;
 
 
 
void test()
{
 float x;
 cout << "Последовательность: ";
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 while(true)
 {
  input >> x;
  if(!input.eof())
  {
   cout << x << " ";  
  }  
  else 
   break;
 }  
}
 
 
 
void processing()
{
 float now = 0,
        _1st = 0,
        _2th = 0;
 int col_e = 0,
     col_s = 0;
 
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 ofstream output("/media/wind/forlabs/2_sem/l1/output.txt");
 
 cout << endl << "| x | кол-во эл. |";
 output << endl << "| x | кол-во эл. |";
 
 while(!input.eof())
 {
  input >> now;
  {
   col_e++;
   _1st = now;
   cout << endl << "| " << now << " | " << col_e << " |";
   output << endl << "| " << now << " | " << col_e << " |";
   cout << " <- начало отрезка";
  } 
  input >> now;
  {
   if(now != _1st)
   {
    col_e++;
    _2th = now;
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";   
   }  
  }      
  input >> now;
  {
   if((_2th > now)&&(_2th > _1st))
   {
    col_e++;
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";
    _1st = now;   
   }  
   if((_2th < now)&&(_2th < _1st))
   {
    col_e++;
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";
    _1st = now;   
   }
   else
   {
    col_e = 0;
    cout << "отрезок окончен";
    col_s++;   
    continue;
   }  
  }
  input >> now;
  {
   if((_1st > now)&&(_1st > _2th))
   {
    col_e++;
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";
    _2th = now;   
   }  
   if((_1st < now)&&(_1st < _2th))
   {
    col_e++;
    cout << endl << "| " << now << " | " << col_e << " |";
    output << endl << "| " << now << " | " << col_e << " |";
    _2th = now;   
   }
   else
   {
    col_e = 0;
    cout << "отрезок окончен";
    col_s++;   
    continue;   
   }  
  }
  
 }
cout << endl << endl << "Количество отрезков, обладающих заданным свойством: " << col_s;
output.close();
input.close();
}
 
 
 
int main()
{
 test();
 processing();
return 0;   
}

Попытка 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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
 float now = 0,
       _1st = 0,
       _2th = 0,
       max = 0,
       min = 0;
 int col_s = 0,
     col_e = 0;
 
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 
 
 while(!input.eof())
 {
  input >> now;
  {
   _1st = now;
  }
  input >> now;
  {
   if(now != _1st)
   {
    _2th = now;   
   }      
   else
   {
    continue;   
   }
  }
  input >> now;
  if(_2th < _1st)
  {
   if(now > _2th)
   {
    _1st = now;   
   }  
   else
   {
    col_s++;
    continue;   
   }
  }
  else
  {
   if(now < _2th)
   {
    _1st = now;   
   }  
   else
   {
    col_s++;
    continue;   
   }
  }  
 }
 cout << col_s;
 input.close();         
}
Попытка 6:
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
#include <iostream>
#include <fstream>
using namespace std;
 
void processing()
{
 float now = 0, 
       _1st = 0, 
       _2th = 0;
 int col_s = 0;
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 while(!input.eof())
 {
  input >> now;
  {
   _1st = now;
  }
  input >> now;
   {
    if(now != _2th)
    {
     _2th = now;      
    }
    else continue;
   }
  
  while(!input.eof())
  {
   input >> now;
    if(((_2th < now)&&(_2th < _1st))||((_2th > now)&&(_2th > _1st)))
    {
     _1st = now;   
    }  
    else
    {
     col_s++;
     break;   
    }
   
   input >> now;
    if(((_1st < now)&&(_1st < _2th))||((_1st > now)&&(_1st > _2th)))
    {
     _2th = now;   
    }
    else
    {
     col_s++;
     break;   
    }
   }
  } 
cout << "Количество секторов с заданным свойством: " << col_s;
input.close();
}
 
int main()
{
 processing();
return 0;   
}
так же вкладываю вариант файла input.txt (может кому-то надо будет)
спасибо заранее за помощь
http://www.cyberforum.ru/cpp-beginners/thread1077746.html
0
Вложения
Тип файла: txt input.txt (36 байт, 17 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 22:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос последовательность "пила" (C++):

Проверить, образуют ли числа симметричную последовательность (варианты ответа "Yes" или "No")
на с++ помогите исправить код #include &lt;iostream&gt; using namespace std; ...

Каждую последовательность символов"АBC" заменить на"ALPHABET"
ввести строку.Создать другую строку из символов введенной, где каждую...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания...

3
MrCold
859 / 757 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
08.02.2012, 22:45 #2
Kirill Losev, прикинь, если так каждый попытается ?
1
x1Mike7x
218 / 131 / 19
Регистрация: 06.11.2010
Сообщений: 234
09.02.2012, 00:02 #3
Может поможет:
Вот есть задача поиска самой большой пилообразной подпоследовательности:
Вот одно из решений: http://codepad.org/UD06SMlc
Если тебе надо найти, или есть твоя введенная последовательность пилообразной, то в конце просто проверь, или результат вычислений == размеру последовательности.
1
Kirill Losev
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
12.02.2012, 20:47  [ТС] #4
x1Mike7x, спасибо

Добавлено через 2 минуты
вот еще попытался написать. работает лучше, но есть проблемы. там должно быть все понятно, вроде

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
#include <iostream>
#include <fstream>
using namespace std;
 
 
void test()
{
 float x;
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 cout << "последовательность: ";
 while(!input.eof())
 {
  input >> x;
  cout << x << " ";      
 }
 input.close();
}
 
 
void processing()
{
 float x=0,
       y=0,
       c=0;
 int col_s=0,
     col_e=0,
     num=1;
 
 ifstream input("/media/wind/forlabs/2_sem/l1/input.txt");
 while(!input.eof())
 {
  input >> x; cout<<endl<<num++;
  y = x;
  input >> x; cout<<endl<<num++;
  if(x!=y)
  {
   c=x; 
  }  
  else  
  {
   cout << "     новые точки равны";
   continue;
  } 
    
  while(!input.eof())
  {
  //-------
  input >> x; cout<<endl<<num++;
  if(((c<x)&&(c<y))||((c>x)&&(c>y)))
  {
   col_e +=3;
   y=x;   
  }
  else 
  { 
   if(((y<c)&&(c<x))||((y>c)&&(c>x)))
   {
    cout <<"        1 y<c<x или y>c>x";
    col_e= 0;
    break;   
   }
   else
   {
    col_e =0;
    col_s++;
    cout << "        1 отрезок окончен. x="<<x;  
    break;
   }
  }
   //------
  input>>x; cout<<endl<<num++;
  if(((y<x)&&(y<c))||((y>x)&&(y>c)))
  {
   col_e++;
   c=x;   
  }
  else
  {
   if(((c<y)&&(y<x))||((c>y)&&(y>x)))
   {
    cout << "          2 c<y<x или c>y>x";
    col_e=0;
    break;   
   }
   else
   {
    col_e=0;
    col_s++;
    cout<<"          2 отрезок закончен. x="<<x;
    break;  
   }
  }
  }
 }
 cout<<endl<<"количество секторов: "<<col_s;
}
 
 
int main()
{
 test();
 processing();
return 0;   
}
Прошу, помогите студенту новичку!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 20:47
Привет! Вот еще темы с решениями:

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. ...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата"
определить тип данных запись имеющий поля фамилия пол зарплата. определить...

Дано трехзначное число. Проверить истинность высказывания: "Цыфры даного числа образуют возрастающую или убывающую последовательность"."
Если кто делает можна с комнтариями что и за что отвечат в кратце. Булеан это...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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