Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 16:42   #1
3Doleg
Пользователь
 
Регистрация: 03.10.2012
Сообщений: 67
Сообщение Одномерный массив из номеров строк матрицы

Всем добрый день)
прошу помочь в решении задачи

С клавиатуры ввести прямоугольную матрицу целых чисел. Создать одномерный массив из номеров строк матрицы, состоящие из тех же чисел, что и первая строка (порядок записи чисел в строке может быть произвольным). Распечатать сформирован массив или вывести сообщение об отсутствии соответствующих строк

вот все, что у меня получилось:
Код:
#include "stdio.h"
#include "math.h"
#include "stdlib.h"

#define N 3
#define M 4

int main(void)
{
int mass[N][M], vector[M], i, j, count = 0;

system("cls");

printf("vvedite elementu matruci: \n");

for(i = 1; i <= N; i++)
{
for(j = 1; j <= M; j++)
{
printf("mass[%d][%d]= ",i, j);
scanf("%i", &mass[i][j]);


}
}

system("cls");

for(i = 1; i <= N; i++)
{
for(j = 1; j <= M; j++)
{
printf("%i ",mass[i][j]);
}
printf("\n");
}

printf("vector = \n\n");

for(i = 2; i <= N; i++)
{
for(j = 1; j <= M; j++)


if(mass[1][j] == mass[i][j])
{
++count;
vector[count] = i;
break;
}

printf("%d ", vector[count]);
}


getch();
return 0;
}
Заранее спасибо)
3Doleg вне форума Ответить с цитированием
Старый 14.03.2013, 17:00   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Ошибка размерностей. У Вас матрица в N строк, M столбцов - соответственно, vector может иметь до N элементов.

2) Ошибка нумерации. В C++ все элементы нумеруются от 0, а не от 1. Соответственно,
Код:
for(int i = 0; i < N; ++i)
{
  for(int j = 0; j < M; ++j)
  {
    printf("%i ", mass[i][j]);
  }
  printf("\n");
}
Обратите внимание, можно объявлять переменную прямо в теле цикла.

3) Сделаем отдельную функцию:
Код:
bool IsSameString(const int** matrix, int columns, int rowA, int rowB){
  if(rowA == rowB) return true;

  //Заводим ещё два массива размера columns
  int* copyA = new int[columns];
  //Копируем соответствующую строку
  memcpy(copyA, matrix[rowA], columns*sizeof(int));
  //Упорядочиваем (иначе задание станет адом):
  std::sort(copyA, copyA+columns);

  //И ещё раз:
  int* copyB = new int[columns];
  memcpy(copyB, matrix[rowB], columns*sizeof(int));
  std::sort(copyB, copyB+columns);

  //А теперь - проверяем
  for(int i=0; i<columns; ++i){
    if(copyA[i] != copyB[i]){
      //Сделали new[] - обязаны сделать delete[]
      delete[] copyA; delete[] copyB;
      return false;
    }
  }
  //Если успешно вышли из цикла - строки совпали
  delete[] copyA; delete[] copyB;
  return true;
}
И вызываем нашу функцию в main:
Код:
for(int i = 0; i < N; i++) //Что, первую строку не надо проверять?
{
  if(IsSameString(mass, M, 0, i)){
    printf("%d ", i+1);
  }
}
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив. Заменить элементы с нечетными номерами на квадраты их номеров кумитэ Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2011 00:57
Одномерный массив. Вывод номеров отрицательных элементов массива. RomashkaGT Помощь студентам 3 25.02.2011 08:44
Составить подпрограмму определения номеров строк матрицы с минимальной и максимальной характеристиками VNS Помощь студентам 0 08.12.2009 17:53
Составить подпрограмму определения номеров строк матрицы с минимальной и максимальной характеристиками VNS Помощь студентам 0 05.12.2009 20:34
Получить новый одномерный массив В,каждый элемент которого равен мин элементу строк исходной матрицы Artimbulidor Помощь студентам 6 29.12.2008 18:51