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

Переформировать матрицу - C++

Восстановить пароль Регистрация
 
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
30.03.2009, 18:56     Переформировать матрицу #1
Вот, собственно, такое задание:
"Из положительных элементов матрицы N сформировать матрицу M(10, KMAX), располагая их в строках матрицы подряд, где KMAX - максимальное число положительных элементов строки матрицы N. Записать нули на место отсутсвтующих элементов. N(10, 10)"

Вот моя попытка... компилятор вешаецо)
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
# include<iostream.h>
# include<stdlib.h>
# include<iomanip.h>
# define x 10 
# define y 10
 
void input(float n[][10]);  //ф-ия заполнения массива
void print(float n[][10]);  //Вывод массива на экран
void result(float n[][10]);  //отрицательные элементы заменяем нулями
 
int main(){
    float n[x][y]; //наш массив
    input(n); //вызываем функцию "input"-функцию заполнения массива. Возвращаемое зн-е: n
    cout<<"Исходный массив:\n";
    print(n); //вызываем функцию "print"-функцию вывода массива на экран. Возвращаемое зн-е: n
    result(n); //вызываем функцию "result"-ф-ю замены отр. чисел нулями. Возвращаемое зн-е: n
    cout<<"\nИзмененный массив:\n";
    print(n); //еще раз вызываем ф-ю вывода массива на экран
   return 0;
   }
void input(float n[10][10]) //заполняем массив случайными числами
 {int now=10;  
  srand(now); //устанавливаем начальное число now для ряда случайных чисел
  for (int i=0; i<x; i++) //начинаем с нул. эл-та, пока i<x, увеличивать i на ед. и  вып. следующее:
     for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<y, увеличивать j на ед. и  вып. следующее:
    n[i][j]=rand()-4000;  //заполняем массив числами от -4000
 }
void print(float n[10][10])  //выводим массив на экран
 {  for (int i=0; i<x; i++)  //начинаем с нул. эл-та, пока i<x, увеличить i на ед. и  вып. следующее:
     {for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<y, увеличивать j на ед. и  вып. следующее:
      cout<<setw(7)<<n[i][j]; // выводим на экран элементы массива по порядку
      cout<<endl;  //переводим строку
     }
 }     
void result(float n[10][10]) //отрицательные элементы заменяем нулями
    {for (int i=0; i<x; i++)  //начинаем с нул. эл-та, пока i<x, увеличить i на ед. и  вып. следующее:
      for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<y и эл-т массива<0, увеличивать j на ед. и  вып. следующее:
      {
      while (n[i][j]<0)
        {
     float temp;
         float t;
     temp=n[i][j]; //временному массиву придаем значение отрицательного эл-та массива
     j++;             // берем след эл-т массива
     t=n[i][j]; //временной переменной придаем значение следующего эл-та массива
     j--;             //идем на шаг назад
     n[i][j]=t;       //из отрицательного эл-та делаем положительный
     j++;             //идем на шаг вперед
     n[i][j]=temp;  //в итоге, отрицательный элемент сместили на этаж повыше..     
        }
      }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2009, 18:56     Переформировать матрицу
Посмотрите здесь:

Как умножить матрицу на матрицу C++
Как умножить матрицу на матрицу? C++
C++ Переформировать матрицу
Массив А состоящий из 30 элементов, переформировать так чтобы в начале стояли все неотрицательные значения ... C++
Матрицу А умножить на Матрицу В C++
C++ Отсортировать матрицу и снова сделать из нее начальную матрицу
Получить матрицу из чисел, заполняющих матрицу по линиям, параллельным главной диагонали C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Бартимеус
 Аватар для Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
30.03.2009, 19:15     Переформировать матрицу #2
а причины по которым компилятор вешаецо он тебе не рассказывал?
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 19:44     Переформировать матрицу #3
Судя по коду функция result отрицательные элементы нулями не заменяет... Соответственно вконце первой строки оседают все отрицательные числа и цикл while будет выполняться постоянно...
Хотя алгоритм вообще дырявый... ибо в цикле while j увеличивается на единицу, в результате будет обрабатываться не все элементы, а через один!
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
30.03.2009, 20:38  [ТС]     Переформировать матрицу #4
благодарю, за совет!))

алгоритм хотел сделать таким, чтобы просто сместить отрицательные элементы в конец строки.. а уже потом заменить их нулями (это я еще не сделал)
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 20:42     Переформировать матрицу #5
Если что - обращайся )))
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
01.04.2009, 09:29  [ТС]     Переформировать матрицу #6
немного доработал программу.. теперь сначала в отдельной функции отрицательные элементы в строках заменяются нулями, а уже в другой функции нужно реализовать алгоритм переноса нулей в конец строки - на что у меня фантазии не хватило..

помогите плз, в функции "reform" сделать алгоритм переноса нулей в конец строк)

вот измененный код:
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
# include<iostream.h>
# include<stdlib.h>
# include<iomanip.h>
# define x 10 
# define y 10
 
void input(float n[][10]);  //ф-ия заполнения массива
void print(float n[][10]);  //Вывод массива на экран
void null(float n[][10]);  //отрицательные элементы заменяем нулями
void reform(float n[][10]);  //функция переноса нулей в конец каждой строки
 
int main(){
    float n[x][y], m[x][y];  //наш массив
    input(n); //вызываем функцию "input"-функцию заполнения массива. Возвращаемое зн-е: n
    cout<<"Исходный массив:\n";
    print(n); //вызываем функцию "print"-функцию вывода массива на экран. Возвращаемое зн-е: n
    null(n); //вызываем функцию "result"-ф-ю замены отр. чисел нулями. Возвращаемое зн-е: n
    reform(n);
    cout<<"\nИзмененный массив:\n";
    print(n); //еще раз вызываем ф-ю вывода массива на экран
   return 0;
   }
void input(float n[10][10]) //заполняем массив случайными числами
 {int now=10;  
  srand(now); //устанавливаем начальное число now для ряда случайных чисел
  for (int i=0; i<x; i++) //начинаем с нул. эл-та, пока i<size, увеличивать i на ед. и  вып. следующее:
     for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<size, увеличивать j на ед. и  вып. следующее:
    n[i][j]=rand()-4000;  //заполняем массив числами от -4000
 }
void print(float n[10][10])  //выводим массив на экран
 {  for (int i=0; i<x; i++)  //начинаем с нул. эл-та, пока i<size, увеличить i на ед. и  вып. следующее:
     {for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<size, увеличивать j на ед. и  вып. следующее:
      cout<<setw(7)<<n[i][j]; // выводим на экран элементы массива по порядку
      cout<<endl;  //переводим строку
     }
 }     
void null(float n[10][10]) //отрицательные элементы заменяем нулями
    {for (int i=0; i<x; i++)  //начинаем с нул. эл-та, пока i<size, увеличить i на ед. и  вып. следующее:
      for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<size, увеличивать j на ед. и  вып. следующее:
        if (n[i][j]<0) //если элемент массива меньше нуля
       n[i][j]=0;
    }
void reform(float n[10][10]) //функция переноса нулей в конец каждой строки
    {for (int i=0; i<x; i++)  //начинаем с нул. эл-та, пока i<size, увеличить i на ед. и  вып. следующее:
      for (int j=0; j<y; j++) //начинаем с нул. эл-та, пока j<size, увеличивать j на ед. и  вып. следующее:
    if (n[i][j]==0) //если элемент массива равен нулю, выполнить
       {
       /*
 
          Здсь нужно вставить алгоритм переноса нулей в конец строки
                      
       */
       }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2009, 10:33     Переформировать матрицу
Еще ссылки по теме:

Вывести матрицу B и из этой матрицы В вычесть единичную матрицу А C++
C++ Непонятно условие задачи: Вывести исходную матрицу, преобразованную матрицу и вектор Х.
C++ Ввести с клавиатуры матрицу размерностью M x N. Вывести исходную матрицу, номер строки или столбца с заданны
C++ Функция, принимающая матрицу, возвращающая матрицу
C++ Переформировать текст так, чтобы каждое предложение занимало отдельную строку

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

Или воспользуйтесь поиском по форуму:
Alligieri
CEO
Эксперт C++
 Аватар для Alligieri
2247 / 1236 / 24
Регистрация: 16.03.2009
Сообщений: 3,581
01.04.2009, 10:33     Переформировать матрицу #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
void reform(float n[10][10])
{ int counter=9;
int temp;
 for (int i=0;i<10;i++)
    for (int j=0;j<counter;j++) 
{ if (n[i][j]==0){ temp=n[i][counter];
        n[i][counter]=n[i][j];
        n[i][j]=temp;
        counter--;
         };
}
}
Yandex
Объявления
01.04.2009, 10:33     Переформировать матрицу
Ответ Создать тему
Опции темы

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