1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
1

Преобразовать массив со значениями (0,1) так, чтобы все элементы имели значение 1

20.05.2015, 16:40. Показов 808. Ответов 8
Метки нет (Все метки)

задание такое
дан массив:
-рандомно заполнить его(0 и 1).
-выбираем любой элемент у которого значение 1,находим его (один)два соседних элемента(которые не равны 1) также присваиваем им 1.
-так до тех пор пока массив не будет заполнен.
на выходе получить массив 1.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 16:40
Ответы с готовыми решениями:

Преобразовать массив так, чтобы элементы с четными и нечетными значениями чередовались
Пожалуйста помогите с задачей: Дан массив целых чисел. Преобразовать его так, чтобы элементы с...

Преобразовать массив так, чтобы сначала располагались все элементы, равные нулю, а потом все остальные
Ребят помогите с задачей я не программист нужно лабу сделать В одномерном массиве, состоящем из n...

Преобразовать массив так чтобы все ненулевые элементы предшествовали нулевым
Задан массив целых чисел, среди которых есть 0. Преобразовать массив так чтобы все ненулевые...

Преобразовать массив так, чтобы сначала располагались все положительные элементы, а потом отрицательные
Помогите пжлст решить задачу:cry: В одномерном массиве, состоящем из n целых эл-ов, вычислить:...

8
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
20.05.2015, 17:14 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
#include "iostream"
#include <ctime>  
#include "iomanip"
 
using namespace std;
 
int main()
{   
 setlocale(LC_ALL,"Rus");
 srand(time(0)); // генерация случайных чисел 
 int N,M,vibor;
 cout<<"Введите кол-во строк в матрице N=";
 cin>>N;
 cout<<"\nВведите кол-во столбцов в матрице M=";
 cin>>M;
 // объявление двумерного динамического массива
 int **ptrarray = new int* [N];      // строки в массиве   
  for (int count = 0; count < N; count++)        
    ptrarray[count] = new int [M];    //  столбцы 
   //****************
 int **matrik = new int* [N];     
  for (int count = 0; count < N; count++)        
    matrik[count] = new int [2];   
  //**************
 cout<<"\nВведите 0 если хотите вручную заполнить матрицу\n"
       "или любую другую цифру если хотите авто заполнние\n"
       "Выбор:";
 cin>>vibor;
  if(vibor!=0)
   {
    for (int i = 0; i < N; i++)     
     for (int j = 0; j < M; j++)             
         ptrarray[i][j]=rand() % 2;
   }
  else
   {
       cout<<"\nЗаполняйте матрицу.\n";
     for (int i = 0; i < N; i++)     
      for (int j = 0; j < M; j++)
        { cout<<"элемент:["<<i<<"]["<<j<<"]=";
          cin>>ptrarray[i][j];}
   }
  cout<<"\nВаша матрица.\n";
   for (int i = 0; i < N; i++)  {   
      for (int j = 0; j < M; j++)
          cout<<setw(3)<<ptrarray[i][j];
      cout<<endl;} 
 
    for (int i = 0; i <N; i++)  {   
      for (int j = 1; j <M-1; j++){
         if(ptrarray[i][j]==1)
             ptrarray[i][j-1]=1;
         ptrarray[i][j+1]=1;}
 cout<<endl;} 
    cout<<"\nВаша преобразованная матрица.\n";
 for (int i = 0; i < N; i++)  {   
      for (int j = 0; j < M; j++)
          cout<<setw(3)<<ptrarray[i][j];
      cout<<endl;} 
 
  // высвобождение памяти отводимой под двумерный динамический массив:   
  for (int count = 0; count < N; count++)       
      delete [] ptrarray[count]; 
 
 system("pause");
 return 0;
}
0
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
20.05.2015, 18:26 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
#include <iostream>
#include <ctime>
 
typedef unsigned int UINT;
const UINT COUNT = 50;
 
void Print(const bool* array,const UINT& count = COUNT)
{
    for(UINT i = 0; i < count; i++)
    {
        if(i && !(i%5))
            std::cout<<"\n";
        std::cout<<"array["<<i<<"]: "<<array[i]<<" ";
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    UINT no_zero_count = 0;//кол-во единичных значений
    UINT array_index[COUNT];
    bool array[COUNT];
    srand(time(0));
    for(UINT i = 0; i < COUNT; i++)
    {
        array[i] = rand()%2;
        if(array[i])//заполняем массив индексов, чтобы затем рандомно выбрать любой единичный элемент из массива
        {
            array_index[no_zero_count] = i;
            no_zero_count++;
        }
    }
    std::cout<<"Массив до преобразования...\n";
    Print(array);
    const UINT choise = array_index[rand()%no_zero_count+1];//выбираем рандомно индекс элемента из массива
    std::cout<<"\nВыбранный элемент: " << choise<<"\n";
    for(UINT left_bounds = choise,right_bounds = choise;left_bounds || right_bounds <= COUNT-2;)
    {
        if(left_bounds)
        {
            if(!array[left_bounds-1])
                array[left_bounds-1] = true;
            left_bounds--;
        }
        if(right_bounds <= COUNT-2)
        {
            if(!array[right_bounds+1])
                array[right_bounds+1] = true;
            right_bounds++;
        }
    }
    std::cout<<"Массив после преобразования...\n";
    Print(array);
    return 0;
}
1
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
20.05.2015, 19:44  [ТС] 4
Черный мечник ваш код нули выдает

Добавлено через 3 минуты
smartpointer,
можно как-то в вашей программе сделать задержку?чтоб видеть как нули превращаются в 1.
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
20.05.2015, 22:04 5
ret_st,странно
0
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
20.05.2015, 22:06  [ТС] 6
Черный мечник,
у меня в студии 12 один или два нуля в конце все равно выходят.
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
20.05.2015, 22:17 7
ret_st, Я просто по условию не так чутка сделал=)
C++
1
2
3
4
5
6
7
8
#include <windows.h>
  for(UINT i = 0; i < count; i++)
    {
        if(i && !(i%5))
            std::cout<<"\n";
        std::cout<<"array["<<i<<"]: "<<array[i]<<" ";
    Sleep(100);  //где в скобках время задержки вывода в мск 1000мс=1с
    }
Добавлено через 49 секунд
я про код многоуважаемого smartpointer=)
0
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
20.05.2015, 22:22  [ТС] 8
а причем здесь функция print к вашему коду?
0
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
20.05.2015, 22:34 9
Вам нужен именно сам процесс замены ? Вот измененный код с детальным выводом, на каждом измененном элементе.
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
#include <iostream>
#include <ctime>
#include <windows.h>
 
typedef unsigned int UINT;
const UINT COUNT = 50;
 
void Print(const bool* array,const UINT& count = COUNT)
{
    for(UINT i = 0; i < count; i++)
    {
        if(i && !(i%5))
            std::cout<<"\n";
        std::cout<<"array["<<i<<"]: "<<array[i]<<" ";
    }
}
void DetailPrint(const bool* array,const UINT& index)
{
    static UINT end_line = 0;
    if(end_line && !(end_line % 5 ))
    {
        end_line = 0;
        std::cout<<"\n";
    }
    end_line++;
    std::cout<<"array["<<index<<"]: "<< array[index] <<" ";
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    UINT no_zero_count = 0;//кол-во единичных значений
    UINT array_index[COUNT];
    bool array[COUNT];
    srand(time(0));
    for(UINT i = 0; i < COUNT; i++)
    {
        array[i] = rand()%2;
        if(array[i])//заполняем массив индексов, чтобы затем рандомно выбрать любой единичный элемент из массива
        {
            array_index[no_zero_count] = i;
            no_zero_count++;
        }
    }
    std::cout<<"Массив до преобразования...\n";
    Print(array);
    const UINT choise = array_index[rand()%no_zero_count+1];//выбираем рандомно индекс элемента из массива
    std::cout<<"\nВыбранный элемент: " << choise<<"\n";
    std::cout<<"Смещаемся вправо/влево от выбранного элемента, пока не дойдем до границ массива\n";
    Sleep(1000);
    for(UINT left_bounds = choise,right_bounds = choise;left_bounds || right_bounds <= COUNT-2;)
    {
        if(left_bounds)
        {
            if(!array[left_bounds-1])
            {
                array[left_bounds-1] = true;
                DetailPrint(array,left_bounds-1);
                Sleep(1000);
            }
            left_bounds--;
        }
        if(right_bounds <= COUNT-2)
        {
            if(!array[right_bounds+1])
            {
                array[right_bounds+1] = true;
                DetailPrint(array,right_bounds+1);
                Sleep(1000);
            }
            right_bounds++;
        }
    }
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 22:34
Помогаю со студенческими работами здесь

Преобразовать массив так, чтобы сначала располагались все элементы, отличающиеся от максимального не более 20%
Задача звучит так: Преобразовать массив таким образом, чтобы сначала располагались все элементы,...

Преобразовать массив так, чтобы отрицательные элементы шли первыми, все остальные за ними
Доброго времени суток. Мне нужно перезаписать массив так, чтобы отрицательные элементы шли первыми...

Преобразовать массив так, чтобы сначала распологались все элементы равные нулю (составить блок-схему)
Преобразовать массив таким образом, чтобы сначала распологались все элементы равные нулю, а потом...

Преобразовать массив так, чтобы сначала шли все элементы с вещественной частью, а потом без неё
3. Создать массив из 10 вещественных чисел. Преобразовать массив так, чтобы сначала шли все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru