Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [с++] удаление элемента матрицы 
:(
    Опции темы
FOLGA
Дата 23.10.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Вот такая у меня задача, вроде не сложная: Получить новую числовую вещественную матрицу, удалив из каждой строки исходной матрицы размерности N*N максимальный элемент данной строки.

Добавлено через 2 минуты и 40 секунд
забыла сказать, на С++ код нужен...  smile 
PM MAIL   Вверх
Scrolly
Дата 23.10.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Не до конца понял смысл задачи. Что озночает удалить(?), и что будет в место него? След. элемент в данной строке? Я сделал как проще)), просто заменил максимальный элемент нулем smile 
Код

#include "stdafx.h"
#include "iostream"
#include <stdlib.h>
const int k=10;
using namespace std;
void main()
{
int n[k][k],i,j,maxm,maxi=1,maxj=1;
for(i=0;i<k;i++){
    cout<<endl;
    for(j=0;j<k;j++){
          n[i][j]=rand();
        cout<<n[i][j]<<" ";}
}
for(i=0;i<k;i++)
{
   maxm=(n[i][1]);maxi=i;maxj=1;
     for(j=0;j<k;j++)
       if (n[i][j]>maxm) 
       {
           maxm=n[i][j];maxi=i;maxj=j;
       }
       n[maxi][maxj]=0;
 } 
cout<<endl;
cout<<"------------------------------------";
for(i=0;i<k;i++){
    cout<<endl;
    for(j=0;j<k;j++)
        cout<<n[i][j]<<" ";}
cin.get();

}


Писалось на VS2005.
PM MAIL ICQ   Вверх
FOLGA
Дата 24.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Я и сама этого не поняла, но я думаю так тоже пойдет, спасибо)

PM MAIL   Вверх
Optimus
Дата 24.10.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



если прочитать так:
Цитата(FOLGA @  23.10.2007,  21:18 Найти цитируемый пост)
из исходной матрицы размерности N*N 


Цитата(FOLGA @  23.10.2007,  21:18 Найти цитируемый пост)
Получить новую числовую вещественную матрицу


Цитата(FOLGA @  23.10.2007,  21:18 Найти цитируемый пост)
удалив из каждой строки максимальный элемент


думаю станет понятней, ИМХО

Код

#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include <time.h>
#include <stdlib.h>

using namespace std;

void main()
{
  const int N = 5;
  int array[N][N];
  int newArray[N][N-1];
  int maxElem;
  int indexMaxElem;
  int i;
  int j;
  int k;

  srand(time(NULL)); // рандомизация генератора случайных чисел

  for (i = 0; i < N; ++i)
  {
    for (j = 0; j < N; ++j)
    {
      array[i][j] = rand() % 1000; // присваиваем значения от 0 и до 1000
      cout << setw(5) << array[i][j];
    }

    cout << endl;
  }

  cout << endl << endl;

  for (i = 0; i < N; ++i)
  {
    maxElem = array[i][0];
    indexMaxElem = 0;

    for (j = 1; j < N; ++j)
    {
      // определяем максимальный элемент i-той строки и его индекс
      if (maxElem < array[i][j])
      {
         maxElem = array[i][j];
         indexMaxElem = j;
      }
    }

    k = 0;
    // присваиваем значения i-той строки, без максимальной
    for (j = 0; j < N; ++j)
    {
      if (j != indexMaxElem)
      {
         newArray[i][k++] = array[i][j];
      }
    }
  }

  for ( i = 0; i < N; ++i)
  {
    for (j = 0; j < N - 1; ++j)
    {
      cout << setw(5) << newArray[i][j];
    }

    cout << endl;
  }

  cin.get();
}



Это сообщение отредактировал(а) Optimus - 24.10.2007, 12:51
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Oleg_Ci
Дата 24.10.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



накалякал с двумя массивами...
Код

#include <iostream>
#include<stdlib.h>
#include <time.h>
#include <iomanip>
using namespace std;

int main(){
    setlocale(LC_CTYPE, "Russian"); // для русских букв
    srand((unsigned)time(NULL)); // генератор случайных чисел
    const int n = 5;
    int matrix[n][n], res[n][n-1], max;

    // заполняем матрицу matrix[n][n]
    for( int i=0; i<n; i++ )
        for(int j=0; j<n; j++ )
            matrix[i][j] = rand()%100; 

    // делаем вторую матрицу res[n-1][n]
    for( int i=0; i<n; i++ )
    {
        // поиск позиции макс. числа
        max = 0;
        for( int j=1; j<n; j++ )
            if( matrix[i][max] < matrix[i][j] )
                max = j;
        // копируем matrix >> res
        for(int j=0, x=0; j<n; j++ )
            if( j != max ) res[i][j - x] = matrix[i][j];
            else    x++;
    }
    // выводим первую матрицу
    cout << "Исходная матрица " << n << " x " << n << "\n";
    for( int i=0; i<n; i++ ){
        for(int j=0; j<n; j++ )
            cout << setw(4) << matrix[i][j];
        cout << "\n";
    }
    // выводим вторую
    cout << "\n\nНовая матрица " << n << " x " << n-1 << "\n";
    for( int i=0; i<n; i++ ){
        for(int j=0; j<n-1; j++ )
            cout << setw(4) << res[i][j];
        cout << "\n";
    }


    getchar(); // пауза
    return 0;
}


Добавлено через 1 минуту и 32 секунды
опаздал  smile 
PM MAIL   Вверх
Dov
Дата 24.10.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Optimus @  24.10.2007,  11:49 Найти цитируемый пост)
думаю станет понятней, ИМХО
    smile 

Цитата(FOLGA @  23.10.2007,  20:18 Найти цитируемый пост)
удалив из каждой строки исходной матрицы размерности N*N максимальный элемент данной строки.

А что делать в том случае, если в данной строке имеется несколько максимальных элементов или, например, они все одинаковые, т.е. все максимальные?  smile

Добавлено через 14 минут и 2 секунды
Вот щаззз глянул и вижу, что в этом случае ни один из вышеприведённых примеров правильно работать не будет.  smile  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Scrolly
Дата 24.10.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Цитата(Dov @ 24.10.2007,  21:50)

Добавлено @ 22:04
Вот щаззз глянул и вижу, что в этом случае ни один из вышеприведённых примеров правильно работать не будет.  smile

Условия задачи даны немного расплывчато и вообщем то ни задача, ни тот кто просил решения на это внимания не обратил... делаем вывод, этого ненада smile 
PM MAIL ICQ   Вверх
Dov
Дата 24.10.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Scrolly @  24.10.2007,  21:25 Найти цитируемый пост)
и вообщем то ни задача, ни тот кто просил решения на это внимания не обратил... 


Scrolly, препод обратит... Но будет поздно...  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Optimus
Дата 25.10.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Цитата(Dov @  24.10.2007,  21:50 Найти цитируемый пост)
А что делать в том случае, если в данной строке имеется несколько максимальных элементов


Цитата(FOLGA @  23.10.2007,  21:18 Найти цитируемый пост)
удалив из каждой строки максимальный элемент данной строки.


если есть множества максимальных элементов, удаляем только одного, ИМХО
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Scrolly
Дата 25.10.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Цитата

препод обратит... Но будет поздно... 


Ну мы то в танке)))
Цитата

если есть множества максимальных элементов, удаляем только одного, ИМХО


Извини меня, какой ты именно из максимальных решил удалять? Который красивее? хотя они все одинаковы...
PM MAIL ICQ   Вверх
Optimus
Дата 26.10.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Цитата(Scrolly @  25.10.2007,  16:24 Найти цитируемый пост)
Извини меня, какой ты именно из максимальных решил удалять? Который красивее? хотя они все одинаковы... 

у меня было аналогичная задачка в универе, 
и тогда преподаватель сказал что надо удалить один элемент, первый или последний

Цитата(Dov @  24.10.2007,  21:50 Найти цитируемый пост)
А что делать в том случае, если в данной строке имеется несколько максимальных элементов или, например, они все одинаковые, т.е. все максимальные? 

для такого варианта
Код

#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include <time.h>
#include <stdlib.h>

using namespace std;

void main()
{
  const int N = 5;
  int matrix[N][N] = {{23, 45, 12, 45, 5},
              {44, 32, 77, 77, 44},
              {23, 12, 456, 34, 78},
              {33, 33, 33, 33, 33},
              {47, 47, 47, 47, 25}};
  int **newArray = new int *[N];
  int lengthOfNewArray[N];
  int maxElem;
  int kolMaxElem;
  int i;
  int j;
  int k;

  //srand(time(NULL)); // рандомизация генератора случайных чисел

  for (i = 0; i < N; ++i)
  {
    for (j = 0; j < N; ++j)
    {
      //matrix[i][j] = rand() % 1000; // присваиваем значения от 0 и до 1000
      cout << setw(5) << matrix[i][j];
    }

    cout << endl;
  }

  cout << endl << endl;

  for (i = 0; i < N; ++i)
  {
    maxElem = matrix[i][0];
    kolMaxElem = 1;

    for (j = 1; j < N; ++j)
    {
      // определяем количество максимальных элементов i-той строки
      if (maxElem < matrix[i][j])
      {
         maxElem = matrix[i][j];
         kolMaxElem = 1;
      }
      else
      {
        if( maxElem == matrix[i][j])
        {
          ++kolMaxElem;
        }
      }
    }

    lengthOfNewArray[i] = kolMaxElem;
    if (lengthOfNewArray[i] == N) continue;

    *(newArray + i) = new int [N-lengthOfNewArray[i]];

    k = 0;
    // присваиваем значения i-той строки, без максимальных элементов
    for (j = 0; j < N; ++j)
    {
      if (matrix[i][j] != maxElem)
      {
         newArray[i][k++] = matrix[i][j];
      }
    }
  }

  for ( i = 0; i < N; ++i)
  {
    for (j = 0; j < N - lengthOfNewArray[i]; ++j)
    {
      cout << setw(5) << newArray[i][j];
    }

    cout << endl;
  }

  for (i = 0; i < N; ++i)
  {
    if (lengthOfNewArray[i] != N)
    delete []newArray[i];
  }

  delete [] newArray;

  cin.get();
}


Это сообщение отредактировал(а) Optimus - 26.10.2007, 19:39
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.