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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
#1

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

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

помогите, пожалуйста, написать код, который бы помог мне в решении этой >>>>>миссия - f: сигма1(Z) -> N0. вроде это индуктивные функции<<<<< задачи
честно уже 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 (может кому-то надо будет)
спасибо заранее за помощь
Вложения
Тип файла: txt input.txt (36 байт, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 22:39     последовательность "пила"
Посмотрите здесь:

Дайте определение "Последовательность лексем" C++
C++ Дано трехзначное число. Проверить истинность высказывания: "Цыфры даного числа образуют возрастающую или убывающую последовательность"."
C++ Дано трехзначное число. Проверить истинность высказывания: "Цифры даного числа образуют возрастающую или убывающую последовательность"
C++ Определить, сколько в строке символов "*", ":", ";"
C++ Перегрузка операторов в классе "Последовательность целых чисел"
C++ Ошибка "Error C2017: недопустимая escape-последовательность"
C++ Создать класс "Последовательность целых чисел"
Проверить встречается ли последовательность ",-" C++
C++ Переменные "емкость", "Галлон", "Бензин"
C++ Рекурсия. "Перевернуть" последовательность положительных целых чисел
"Перевернуть" последовательность положительных целых чисел C++
C++ Программа, которая "переворачивает" последовательность положительных целых чисел

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
08.02.2012, 22:45     последовательность "пила" #2
Kirill Losev, прикинь, если так каждый попытается ?
x1Mike7x
215 / 128 / 6
Регистрация: 06.11.2010
Сообщений: 234
09.02.2012, 00:02     последовательность "пила" #3
Может поможет:
Вот есть задача поиска самой большой пилообразной подпоследовательности: http://********/index.asp?main=task&id_task=20
Вот одно из решений: http://codepad.org/UD06SMlc
Если тебе надо найти, или есть твоя введенная последовательность пилообразной, то в конце просто проверь, или результат вычислений == размеру последовательности.
Kirill Losev
3 / 3 / 0
Регистрация: 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;   
}
Прошу, помогите студенту новичку!
Yandex
Объявления
12.02.2012, 20:47     последовательность "пила"
Ответ Создать тему
Опции темы

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