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

Массив - C++

Восстановить пароль Регистрация
 
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
21.02.2012, 23:14     Массив #1
Найти и вывести наибольшее число возрастающих (убывающих) элементов
матрицы, идущих подряд.
Матрицу я задаю динамически, но как циклы для подсчета написать, не выходит...(((
Если можно, подсказать.
И еще вопросик, с консоли легко, а как с командной строки строки вводить в память не знаю...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2012, 23:14     Массив
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
Сформировать массив А из четных элементов исходного массива, а массив В - из нечетных C++
Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
динамический массив (Целое число разложить на массив простых множителей) C++
C++ Массив: Переместить в массив Y все числа, дробная часть которых больше 5.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.02.2012, 00:02     Массив #2
А что значит "элементов матрицы, идущих подряд?"
Т.е. как подряд? Только по горизонтали или ещё по вертикали, диоганали, по спирали?
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
22.02.2012, 00:26  [ТС]     Массив #3
По строкам, каждый раз переходя на следующую. Сначала смотрим первую строку, сразу за ней вторую и т. д. И все элементы считаются как один ряд, а массивв двумерный.

Добавлено через 21 минуту
По строкам, каждый раз переходя на следующую. Сначала смотрим первую строку, сразу за ней вторую и т. д. И все элементы считаются как один ряд, а массивв двумерный.
(SkyNet)
 Аватар для (SkyNet)
22 / 40 / 6
Регистрация: 25.10.2011
Сообщений: 175
22.02.2012, 00:44     Массив #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
#include <stdio.h>
#include <conio.h>
#define n 5
void main()
{
 int a[n][n]={-5, 4, 2, 8,-4,
          -4,-3, 0, 4, 7, //za zrostanyam
           8, 5, 4, 0,-6, //za spadanyam
           0, 1, 6, 8, 9, //za zrostanyam
           5, 1,-1,-4,-6};//za spadanyam
 
 int i, j, *p;
 int max, fl1, fl2;
 p=&a[0][0];
 printf("Masuv:");
 for(i=0; i<n; i++)
 {
  printf("\n ");
  for(j=0; j<n; j++)
  {
   printf("  %d  ",*(p+i*n+j));
  }
 }
 for(i=0; i<n; i++)
 {
     fl1=0; fl2=0, max=*(p+i*n);
  for(j=1; j<n; j++)
  {
      if(max<*(p+i*n+j))
          max=*(p+i*n+j);
      if(*(p+i*n+j) > *(p+i*n+j-1))
          fl1=1;
      if(*(p+i*n+j) < *(p+i*n+j-1))
          fl2=1;
  }
  if(fl1==0 || fl2==0)
      printf("\nv ryadky %d max element: %d", i+1, max);
 }
 getch();
}
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
22.02.2012, 00:52     Массив #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
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
/* 
 * File:   main.cpp
 * Author: qobject
 *
 * Created on 21 Февраль 2012 г., 22:47
 */
 
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <ctime>
 
using namespace std;
 
/*
 * 
 */
int main( int argc, char** argv )
{
//   if ( argc < 3 ) // передано в командную строку меньше 2 аргументов
//   {
//      printf( "not enough data. Please enter 2 arguments\n" );
//      exit( EXIT_FAILURE );
 //  }
   
   int rows = 5;
   int columns = 5;
   
   srand( time(0) ); // засеять генератор случайных чисел
   
//   // считать первый параметр из коммандной строки и записать в rows
//   sscanf( argv[1], "%u", &rows );
//   // считать первый параметр и записать в columns
//   sscanf( argv[2], "%u", &columns );
   
   // создаём динамический двумерный массив
   int **arr = new int *[ rows ];
   for( int i=0; i < columns; i++ )
      arr[i] = new int[ rows ];
   
   // инициализируем массив случайными числами от 0 до 100?
   for( int i=0 ; i < rows; i++ )
      for( int j=0; j < columns; j++ )
         arr[i][j] = rand() % 100 + 1;
   // находим наибольшую возрастающую/убывающую последовательность
   
   
   // собственно, вычиляем последовательности
   
   int min_length = 0; // длина максимально убывающей последовательности
   int max_length = 0; // длина возрастающей
   
   int potential_max_length = 0;
   int potential_min_length = 0;
   for( int i=1; i < rows * columns; i++ )
   {
      // Если новый элемент больше предыдущего
      if( arr[ i/rows ][ i%( columns + 1 ) ] < arr[ (i-1)/rows ][ (i-1)%( columns + 1 ) ] )
      {
         potential_max_length = 1;
         do
         {
            potential_max_length++;
            i++;
         } while ( i < rows * columns && ( arr[ i/rows ][ i%( columns + 1 ) ] < arr[ (i-1)/rows ][ (i-1)%( columns + 1 ) ] ));
         
         if ( potential_max_length > max_length )
            max_length = potential_max_length;
         
//         i--;
      }
      // иначе, если мы имеем дело с убывающей последовательностью
      else if ( arr[ i/rows ][ i%( columns + 1 ) ] > arr[ (i-1)/rows ][ (i-1)%( columns + 1 ) ] )
      {
         potential_min_length = 1;
         do
         {
            potential_min_length++;
            i++;
         } while ( i < rows * columns && ( arr[ i/rows ][ i%( columns + 1 ) ] > arr[ (i-1)/rows ][ (i-1)%( columns + 1 ) ] ) );
         
         if ( potential_min_length > min_length )
            min_length = potential_min_length;
         
//         i--;
      }
   }
   
   
   // выводим массив, закомментировать, если не нужно
   for ( int i=0; i < rows; i++ )
   {
      for( int j=0; j < columns; j++ )
      {
         cout << arr[i][j] << " ";
      }
   }
   cout << endl;
   
   cout << "Max length is " << max_length << endl;
   cout << "Min length is " << min_length << endl;
   
delete[] arr;
 
   return 0;
}
Вот только лень отлаживать: нужна ли инкрементация i после каждой попытки вычислить длину убывающей/возрастающей последовательности
P.S.
Кажись всё спутал я. Там где убывание - наоборот возрастание
Yandex
Объявления
22.02.2012, 00:52     Массив
Ответ Создать тему
Опции темы

Текущее время: 06:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru