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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 17:35   #1
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
По умолчанию Матрица размером NxM размещена в одномерном массиве по строкам.

Помогите пожалуйста в С++. С чего нужно все это начать,знакомые сказали установить программу Borland C.
«Матрица размером NxM размещена в одномерном массиве по строкам. Исходный вектор задается случайным образом. Сформировать двумерный массив. Затем удалить из него максимальный элемент каждого столбца. Количество столбцов уменьшится на 1. Вывести на экран исходную и результирующую матрицу.»
ndrus вне форума Ответить с цитированием
Старый 27.03.2011, 18:42   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от ndrus Посмотреть сообщение
... Затем удалить из него максимальный элемент каждого столбца. Количество столбцов уменьшится на 1.
Неверно. На 1 уменьшится количество строк.
Vago вне форума Ответить с цитированием
Старый 28.03.2011, 07:45   #3
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
Хорошо

Цитата:
Сообщение от Vago Посмотреть сообщение
Неверно. На 1 уменьшится количество строк.
ты наверн прав,слово столбцов было зачеркнуто
ndrus вне форума Ответить с цитированием
Старый 28.03.2011, 09:43   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Я не "наверное", я просто прав...
...
Код:
#include <stdio.h>
#include <stdlib.h>

void PrintMatrix( char* cTitle, int* x, int nRows, int nCols ) {

   int row, col ;
      
   printf( "\n%s\n", cTitle ) ;
   for ( row = 0; row < nRows; row++ ) {
      for ( col = 0; col < nCols; col++ )
         printf("%2d", *(x + row*nCols + col ) ) ;
      printf( "\n" ) ;
   }

}


int main() {

   int   col, 
         i,
         maxInCol ,
         row, 
         N, M ;
   int   *a ,
         *aToDelete ;

   printf( "Number of rows ? " );
   scanf( "%d", &N ) ;
   printf( "Number of columns ? " );
   scanf( "%d", &M ) ;

   a = malloc( N * M * sizeof( int ) ) ;
   aToDelete = malloc( M *sizeof( int ) ) ;

   /* Генерируем матрицу */
   srand( N*M ) ; /* Здесь можно играться с аргументом... */
   for ( i = 0; i < N*M; i++ ) {
      *(a+i) = rand() / 3270 ;   /* ...а здесь - со знаменателем */
   }
   PrintMatrix( "The source matrix:", a, N, M ) ;

   /* Ищем максимумы столбцов */
   for ( col = 0; col < M; col++ ) {
      maxInCol = *(a + col) ;
      aToDelete[col] = 0 ;
      for ( row = 1; row < N; row++ ) {
         if ( *(a + row*M + col) > maxInCol ) {
            maxInCol = *(a + row*M + col) ;
            aToDelete[col] = row ;
         }
      }
   }
   PrintMatrix( "Column maximums' indices:", aToDelete, 1, M ) ;

   /* Удаляем максимумы столбцов */
   for ( col = 0; col < M; col++ ) {
      for ( row = aToDelete[col]; row < N-1; row++ ) {
         *(a + row*M + col) = *(a + (row+1)*M + col) ;
      }
   }
   PrintMatrix( "Seeded matrix:", a, N-1, M ) ;

   free( a ) ;
   free( aToDelete ) ;

   return 0 ;

}
На "плюсы" (new() / delete() вместо malloc() / free(); ввод-вывод) уж сам как-нибудь переложи....
Vago вне форума Ответить с цитированием
Старый 28.03.2011, 21:31   #5
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
Хорошо

Ой спасибо большое неожидал,сейчас тяжело встретить хороших людей, попробую понять что куда переложить
ndrus вне форума Ответить с цитированием
Старый 28.03.2011, 22:02   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Да "переложить"-то (на C++) тут как раз нетрудно. А вот при сдаче копать тебя, скорее всего, будут. Эти задачи, на C-шную адресную арифметику, они определённого понимания "как там, внутри, устроено" требуют. Почитай K&R, если ещё этого не делал... Удачи!
Vago вне форума Ответить с цитированием
Старый 29.03.2011, 07:42   #7
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
Смущение

как я понимаю мне надо забить этот код в (borland С)? при этом поменять (new() / delete() вместо malloc() / free();
ndrus вне форума Ответить с цитированием
Старый 29.03.2011, 08:00   #8
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
По умолчанию

нам сказали принести результат на листочке и забить в ихнюю программу или чето там, которую даже не показали.и должно чето получится.
ndrus вне форума Ответить с цитированием
Старый 29.03.2011, 08:23   #9
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от ndrus Посмотреть сообщение
как я понимаю мне надо забить этот код в (borland С)? при этом поменять (new() / delete() вместо malloc() / free();
Если вам сказали написать, на C++, то да. А scanf() / printf() - на >> / << .
Vago вне форума Ответить с цитированием
Старый 20.05.2011, 06:41   #10
ndrus
 
Регистрация: 27.03.2011
Сообщений: 7
По умолчанию

помоги ради бога не получилось у меня сделать в с++, а сегодня сдавать
ndrus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задана матрица размером n x m и вектор размером m Alexan88 Общие вопросы C/C++ 3 20.12.2010 16:01
Группа в одномерном массиве BaronVik Помощь студентам 5 21.10.2010 05:58
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19