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

c++, функция для двухмерного массива - C++

Восстановить пароль Регистрация
 
Basil00
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 23
16.09.2013, 13:05     c++, функция для двухмерного массива #1
написать функцию, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
16.09.2013, 13:58     c++, функция для двухмерного массива #2
Basil00, в чем проблема? показывай наработки

Добавлено через 19 минут
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
bool IsNegative(double **matrix, int rowNumber, int columnCount)
{    
    for(int j=0; j<columnCount;j++)
    {
         if(matrix[rowNumber][j]<0) return true;
    }
    return false;
}
void main()
{
   double **matrix; //динамический двумерный массив
   double *tmp;
   //ввод начальных данных, создание заполнение двумерного массива matrix ... напишешь сам
 
   for(int i=rowCount-1;i>=0;i--)
   {
        if(IsNegative(matrix, i, columnCount))
        {
            tmp=matrix[i];
            for(int k=i;k<rowCount-1;k++)
            {
                 matrix[k]=matrix[k+1]; //сдвиг всех строк на позицию вверх
            }
            matrix[rowCount-1]=tmp; //запись удаляемой строки в последнюю
            for(int j=0;j<columnCount;j++) tmp[j]=0; //заполняем нулями
        }
        
   }
  //после цикла всё готово, можно віводить результат
  
}
как-то так...
Basil00
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 23
21.09.2013, 18:19  [ТС]     c++, функция для двухмерного массива #3
Где-то допустил ошибку, не пойму где


#include <vcl.h>
#include <conio.h>
#include <iostream>


#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
bool IsNegative(double, int,int);
#pragma argsused
int main(int argc, char* argv[])
{
int n,m;
cin >> n >> m;

int** Mas = new int *[n];
for (int i = 0; i < n; ++i)
Mas[i] = new int [m];

cout<<"Enter\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> Mas[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout<<Mas[i][j]<<" ";
}
cout<<"\n";
}
bool IsNegative(double **Mas, int rowNumber,int columnCount)
{
for(int j=0;j<columnCount;j++)
{
for(int j=0; j<columnCount;j++)
{
if(Mas[rowNumber][j]<0) return true;
}
return false;
}
}


/* for (int i = 0; i < n; i++)
delete[] Mas[i];
delete [] Mas; */
getch();
return 0;

}
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
21.09.2013, 19:09     c++, функция для двухмерного массива #4
А зачем Вы код функции IsNegative запихнули внутрь функции main?
Basil00
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 23
21.09.2013, 19:30  [ТС]     c++, функция для двухмерного массива #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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <iostream>
 
 
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
bool IsNegative(double, int,int);
#pragma argsused
int main(int argc, char* argv[])
{
    int n,m;
    cin >> n >> m;
 
    int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int [m];
 
     cout<<"Enter\n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> Mas[i][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout<<Mas[i][j]<<" ";
        }
        cout<<"\n";
    }
 
 
 
   /* for (int i = 0; i < n; i++)
        delete[] Mas[i];
    delete [] Mas;  */
    getch();
    return 0;
 
}
//---------------------------------------------------------------------------
         bool IsNegative(double **Mas, int rowNumber,int columnCount)
 {
 for(int j=0;j<columnCount;j++)
 {
        for(int j=0; j<columnCount;j++)
        {
                if(Mas[rowNumber][j]<0) return "GREAT";
        }
        return "NOT OK";
 }
 }
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
21.09.2013, 19:49     c++, функция для двухмерного массива #6
Цитата Сообщение от Basil00 Посмотреть сообщение
Исправил, но не понимаю, как записать на выполнение булеву функцию в теле
Смотрите
Цитата Сообщение от Algoritmer Посмотреть сообщение
if(IsNegative(matrix, i, columnCount))
Basil00
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 23
21.09.2013, 20:35  [ТС]     c++, функция для двухмерного массива #7
Не работает сейчас
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 21:42     c++, функция для двухмерного массива
Еще ссылки по теме:

C++ Функция для ввода двухмерного динамического массива
Функция для перевыделения памяти для массива C++
C++ Memset для двухмерного массива

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
21.09.2013, 21:42     c++, функция для двухмерного массива #8
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
#define kol_vo_stolb 8
#define kol_vo_strok 5
 
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
 
//функция-вывод массива
void vivod (int**p) {
 printf ("\n"); 
 for (int i= 0; i< kol_vo_strok; i++) {
     for (int j= 0; j< kol_vo_stolb; j++) { 
         printf ("%*d",4,p[i][j]); 
     }
     printf ("\n"); 
 }
}
 
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
 
//В этой функции совершаются все изменения
//принимает указатель на массив указателей
//и номер строки
void izmenenia (int**p, int x) {
   
   int te= 0;
   
   //1) обнуляем нужную строку 
   for (int i= 0; i< kol_vo_stolb; i++) { 
      p[x][i]=0;
      te++;
   }
   //"сдвигаем" все указатели
   int* temp= p[x];
   for (int i= x; i< kol_vo_strok- 1; i++) {
       p[i]= p[i+ 1];            
   }   
 
   //делаем так, чтобы на последнюю строку указывал ПОСЛЕДНИЙ указатель
   p[kol_vo_strok- 1]= temp;
}
 
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++
 
int main () {
 
 srand (time(0));
 int array [kol_vo_strok][kol_vo_stolb];
 
 
 
 //Рандомно заполним массив 
 int* p [kol_vo_strok];
 for (int i= 0; i< kol_vo_strok; i++) {
     p[i]= array[i];  
     for (int j= 0; j< kol_vo_stolb; j++)  
         array [i][j]=rand()% 111- 10; 
 }
 
 //выведем
 vivod (p);
 
 //пробежимся по строкам и в случае отрицательных элементов 
 //совершим изменения массива
 for (int i= 0; i< kol_vo_strok; i++) {
     for (int j= 0; j< kol_vo_stolb; j++)  
         if (p[i][j]< 0) {
            izmenenia (p, i);
            j= kol_vo_stolb;  
            i--;           
         }
 } 
 
 
 //выведем
 vivod (p);
 
 
 getchar ();
 return 0;
}
Yandex
Объявления
21.09.2013, 21:42     c++, функция для двухмерного массива
Ответ Создать тему
Опции темы

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