Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69

указатели

17.12.2009, 22:03. Показов 897. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется группа белых и серых мышей количеством N, расположенных хаотически. Между ними имеются M свободных мест. Составить программу, моделирующую процесс разделения мышей на серых и белых (например, серые выше, белые – ниже) по правилу: каждая мышь может занимать только свободную рядом с ней позицию; за один такт программы мышь может переместиться не более чем в одну позицию.

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
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
 
int change(int *a,int *b)
{
 int i=*a;
 *a=*b;
 *b=i;
}
#pragma argsused
using namespace std;
int main(int argc,char* argv[])
{
  int j,n,m,s1=0,s2=0,x,g=0;
  int mas[n][n];
  cin>>n;
  m=n*n-n;
 
   for(j;j<n;j++)
   for(x;x<n;x++)
   {
    mas[j][x]=rand()%3-0;
 
     if(mas[j][x]==0)
     g++;
     if(g==m)
     mas[j][x]=rand()%2+1;
 
     if(mas[j][x]==1)
     s1++;
     if(mas[j][x]==2)
     s2++;
   }
  for(j;j<n;j++)
  {
  for(x;x<n;x++)
  {
   if(mas[j][x]==1)
   cout<<"b"<<" ";
 
   if(mas[j][x]==2)
   cout<<"s"<<" ";
 
   if(mas[j][x]==0)
   cout<<" "<<" ";
 
   cout<<endl;
  }
  }
  int s3=0,s4=0,z,v;
   while(!(z==s1))
   {
    for(j;j<n;j++)
     for(x;x<n;x++)
      {if(mas[j][x]==1)
       s3++;
      }
      z++;
   }
   while(!(v==s2))
   {
    for(j;j<n;j++)
     for(x;x<n;x++)
     {
      if(mas[j][x]==2)
       s4++;
     }
     v++;
   }
  while((s3==s1)&&(s4==s2))
 {
   for(j;j<n;j++)
     for(x;x<n;x++)
     {
         if((mas[j][x]==1)&&(mas[j+1][x]==0))
         change(&mas[j][x],&mas[j+1][x]);
 
         if((mas[j][x]==1)&&(!(mas[j+1][x]==0))&&(mas[j][x+1]==0))
         change(&mas[j][x],&mas[j][x+1]);
 
         if((mas[j][x]==1)&&(!(mas[j+1][x]==0))&&(mas[j][x-1]==0))
         change(&mas[j][x],&mas[j][x-1]);
         }
 
    for(j;j<n;j++)
     for(x;x<n;x++)
     {
         if((mas[j][x]==2)&&(mas[j-1][x]==0))
         change(&mas[j][x],&mas[j-1][x]);
 
         if((mas[j][x]==2)&&(!(mas[j+1][x]==0))&&(mas[j][x+1]==0))
         change(&mas[j][x],&mas[j][x+1]);
 
         if((mas[j][x]==2)&&(!(mas[j+1][x]==0))&&(mas[j][x-1]==0))
         change(&mas[j][x],&mas[j][x-1]);
         }
 
     }
    for(j;j<n;j++)
 {
  for(x;x<n;x++)
  {
   if(mas[j][x]==1)
   cout<<"b"<<" ";
 
   if(mas[j][x]==2)
   cout<<"s"<<" ";
 
   if(mas[j][x]==0)
   cout<<" "<<" ";
 
   cout<<endl;
  }
 }
}
Добавлено через 25 секунд
что в проге не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2009, 22:03
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++,...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

12
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 10:46
строка 18
int mas[n][n]; // n еще не было инициализировано, а уже используется.

обявления не достаточно, пример:
C++
1
2
int i;
cout << i;
на экран вйдет белеберда
вот так
C++
1
2
  cin>>n;
  int mas[n][n];
правда, тут еще в чем-то ошибка по-моему, пока не нашел.

Добавлено через 11 часов 29 минут
for(j;j<n;j++) //так не получится. надо незабывать инициализироваить счетчик j. for(j=0;j<n;j++)
в С++ при обьявлении переменной не происходит инициализации по умолчанию, как в паскале!
на строчке 54 начинается цикл while(!(z==s1)){...} условие выхода из которого не выполняется.

я задания не понимаю, проверить всю прогу не могу.
1
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 11:29  [ТС]
мне сейчас нужно, чтоб цикл while заработал

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

Добавлено через 31 минуту
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
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
 
int change(int *a,int *b)
{
 int i=*a;
 *a=*b;
 *b=i;
}
#pragma argsused
using namespace std;
int main(int argc,char* argv[])
{
  int j,n,m,s1=0,s2=0,x,g=0;
  cin>>n;
  int mas[n][n];
 
  m=n*n-n;
 
   for(j=1;j<n;j++)
   for(x=1;x<n;x++)
   {
    mas[j][x]=rand()%3-0;
 
     if(mas[j][x]==0)
     g++;
     if(g==m)
     mas[j][x]=rand()%2+1;
 
     if(mas[j][x]==1)
     s1++;
     if(mas[j][x]==2)
     s2++;
   }
  for(j=1;j<n;j++)
  {
  for(x=1;x<n;x++)
   if(mas[j][x]==1)
   cout<<"b"<<" ";
 
   if(mas[j][x]==2)
   cout<<"s"<<" ";
 
   if(mas[j][x]==0)
   cout<<" "<<" ";
   cout<<endl;
  }
  int s3=0,s4=0,z=0,v=0;
   while(!(z==s1))
   {z++;
    for(j=1;j<n;j++)
     {
     for(x=1;x<n;x++)
      if(mas[j][x]==1)
       s3++;
      }
 
   }
   while(!(v==s2))
   {v++;
    for(j=n;j>0;j--)
     {
     for(x=n;x>0;x--)
      if(mas[j][x]==2)
       s4++;
     }
        }
  while((s3==s1)&&(s4==s2))
 {
   for(j=1;j<n;j++)
     for(x=1;x<n;x++)
     {
         if((mas[j][x]==1)&&(mas[j+1][x]==0))
         change(&mas[j][x],&mas[j+1][x]);
 
         if((mas[j][x]==1)&&(!(mas[j+1][x]==0))&&(mas[j][x+1]==0))
         change(&mas[j][x],&mas[j][x+1]);
 
         if((mas[j][x]==1)&&(!(mas[j+1][x]==0))&&(mas[j][x-1]==0))
         change(&mas[j][x],&mas[j][x-1]);
         }
 
    for(j=1;j<n;j++)
     for(x=1;x<n;x++)
     {
         if((mas[j][x]==2)&&(mas[j-1][x]==0))
         change(&mas[j][x],&mas[j-1][x]);
 
         if((mas[j][x]==2)&&(!(mas[j+1][x]==0))&&(mas[j][x+1]==0))
         change(&mas[j][x],&mas[j][x+1]);
 
         if((mas[j][x]==2)&&(!(mas[j+1][x]==0))&&(mas[j][x-1]==0))
         change(&mas[j][x],&mas[j][x-1]);
         }
 
     }
    for(j=0;j<n;j++)
 {
  for(x=0;x<n;x++)
 
   if(mas[j][x]==1)
   cout<<"b"<<" ";
 
   if(mas[j][x]==2)
   cout<<"s"<<" ";
 
   if(mas[j][x]==0)
   cout<<" "<<" ";
 
   cout<<endl;
 }
}
Добавлено через 21 секунду
вот сейчас проверь
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 12:26
вот, ради тестирование остальное вырезал, но ты разберешься
это как матрицу для твоей задачи получить
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
#include <conio.h>
#include <iostream>
#include <time.h>
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    int mas[n][n];
   
    srand(time(0));
    
    for (int i=0;i<n;i++)
    for (int j=0;j<n;j++) mas[i][j]=0;
    for (int i=1;i<=n*n-n-1;i++)// меняешь i<=(чего-нибудь) - для изменения количества, мышей на поле, но они все равно случайное.
    {
        int place=rand()%(n*n)-0;
        int type=rand()%(99)-0;
        if (type > 49){ mas[(int)place/n][place % n]=1;}//1 - белая;
        else {mas[(int)place/n][place % n]=2;}//2-черная.
    }
    //здесь уже матрица со случайными 1 и 2 в случайных клетках.
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++) cout << mas[i][j] << " ";
        cout << endl;
    }
    getch();
}
подходит?
0
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 12:30  [ТС]
чет не так. при n=5 он мне выдал 8 единичек и двоек)) лан, щас помудрю))
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 13:03
у меня в предыдузем примере n - это порядок матрицы!
а теперь:
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
#include <conio.h>
#include <iostream>
#include <time.h>
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    int mas[n][n];
   
    srand(time(0));
    
    for (int i=0;i<n;i++)
    for (int j=0;j<n;j++) mas[i][j]=0;
    for (int i=1;i<=n;i++)// меняешь i<=(чего-нибудь) - для изменения количества, мышей на поле.
    {
        int place=rand()%(n*n)-0;
        int type=rand()%(99)-0;
        if (type > 49){ if (mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=1;else i--;}//1 - белая;
        else {if(mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=2;else i--;}//2-черная.
    }
    //здесь уже матрица со случайными 1 и 2 в случайных клетках.
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++) cout << mas[i][j] << " ";
        cout << endl;
    }
    getch();
}
я в 16-ой строке заменил n*n ... на просто n.
1
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 13:22  [ТС]
вот, теперь всё супер, Спасибо!)) как бы теперь всё остальное работать заставить))
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 13:47
что после строчки 51 происходит, что вообще должно произойти. мне условие задачи не понятно.
0
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 13:59  [ТС]
все двойки нужно сместить вверх, все единички вниз. каждая единичка и двойка может за раз перемещаться только на одну ячейку, и перемещаться может только на пустую, тоесть с нулём местами меняться

Добавлено через 2 минуты
надо сделать, чтобы функция, котора местами меняет элементы была через указатели написана. ну она у меня вроде правильно написана

Добавлено через 38 секунд
только сами условия у меня косячные
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 14:45
вот. только черные мыши моментально убегают. странно, но поправить не могу
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 <conio.h>
#include <iostream>
#include <time.h>
 
int change(int *a,int *b)
{
 int i=*a;
 *a=*b;
 *b=i;
}
using namespace std;
int main()
{
  int n;
    cin >> n;
    int mas[n][n];
   
    srand(time(0));
    
    for (int i=0;i<n;i++)
    for (int j=0;j<n;j++) mas[i][j]=0;
    for (int i=1;i<=n;i++)// меняешь i<=(чего-нибудь) - для изменения количества, мышей на поле.
    {
        int place=rand()%(n*n)-0;
        int type=rand()%(99)-0;
        if (type > 49){ if (mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=1;else i--;}//1 - белая;
        else {if(mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=2;else i--;}//2-черная.
    }
    //здесь уже матрица со случайными 1 и 2 в случайных клетках.
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++) 
        {
            //cout << mas[i][j] << " ";
            if(mas[i][j]==1) cout << "-w-";
            if(mas[i][j]==0) cout << "---";
            if(mas[i][j]==2) cout << "-b-";
        }
        cout << endl;
    }
    
    getch();
    
    for (int c=0;c<n;c++)
    {
        for (int i=0;i<n;i++)
            for (int j=0;j<n;j++)
            {
                if((mas[i][j]==1)&&(i>0))change(&mas[i-1][j],&mas[i][j]);
                if((mas[i][j]==2)&&(i<n-1)){change(&mas[i+1][j],&mas[i][j]);}
            }
        //вывод на экран
        system("cls");
        cout << endl;
        for (int i=0;i<n;i++)
        {
            for (int j=0;j<n;j++) 
            {
                if(mas[i][j]==1) cout << "-w-";
                if(mas[i][j]==0) cout << "---";
                if(mas[i][j]==2) cout << "-b-";
            }
            cout << endl;
        }
        getch();
    }
}
введи 20, или типа того, потом enter нажимай. работает?
1
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 14:59  [ТС]
Добавлено через 3 минуты
да, всё работает отлично! а как сделать, чтоб не по нажатию выходило, а просто отсортированный массив ниже вышел и всё? ты меня очень выручил!
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 16:36
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 <conio.h>
#include <iostream>
#include <time.h>
 
int change(int *a,int *b)
{
 int i=*a;
 *a=*b;
 *b=i;
}
using namespace std;
int main()
{
  int n;
    cin >> n;
    int mas[n][n];
   
    srand(time(0));
    
    for (int i=0;i<n;i++)
    for (int j=0;j<n;j++) mas[i][j]=0;
    for (int i=1;i<=n;i++)// меняешь i<=(чего-нибудь) - для изменения количества, мышей на поле.
    {
        int place=rand()%(n*n)-0;
        int type=rand()%(99)-0;
        if (type > 49){ if (mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=1;else i--;}//1 - белая;
        else {if(mas[(int)place/n][place % n]==0)mas[(int)place/n][place % n]=2;else i--;}//2-черная.
    }
    //здесь уже матрица со случайными 1 и 2 в случайных клетках.
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++) 
        {
            //cout << mas[i][j] << " ";
            if(mas[i][j]==1) cout << "-w-";
            if(mas[i][j]==0) cout << "---";
            if(mas[i][j]==2) cout << "-b-";
        }
        cout << endl;
    }
    
    getch();
    //тут мыши поползли к верху и к низу
    for (int c=0;c<n;c++)
    {
        for (int i=0;i<n;i++)
            for (int j=0;j<n;j++)
            {
                if((mas[i][j]==1)&&(i>0))change(&mas[i-1][j],&mas[i][j]);
                if((mas[i][j]==2)&&(i<n-1)){change(&mas[i+1][j],&mas[i][j]);}
            }
    }
    //вывод на экран
    system("cls");
    cout << endl;
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++) 
        {
            if(mas[i][j]==1) cout << "-w-";
            if(mas[i][j]==0) cout << "---";
            if(mas[i][j]==2) cout << "-b-";
         }
         cout << endl;
    }    
    getch();
}
а в аську то зачем...
1
23 / 23 / 13
Регистрация: 29.10.2008
Сообщений: 69
18.12.2009, 16:43  [ТС]
еще раз огромное спасибо))а в аську.. просто отблагодарить хотел по-человечески)) ты время своё тратил как-никак)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2009, 16:43
Помогаю со студенческими работами здесь

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Отсортировать массив и вывести на экран (массивы и указатели на указатели)
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на указатели, как правильно разыменовать, где ошибка?
1)Есть класс: Shape - абстрактный; у него есть классы наследники: Circle, Triangle. 2)Eсть контейнер: vector &lt;Shape*&gt; Scontainer;...

Указатели на указатели: для чего они могут понадобятся?
Изучаю C++, дошёл до указателей на указатели. Там пишут что эта тема не обязательна. Для чего они могут понадобятся?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru