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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многомерный массив, Удаление строки. 
:(
    Опции темы
VIvan
Дата 25.4.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В матрице размерностью nxm удалить строку, содержащую минимальный элемент.
Подскажите пожалуйста как можно видоизменить функцию output, чтобы выводилась матрица с уже удаленной строкой...  smile 
Код

#include <stdio.h>
#include <conio.h>
#define N 15
#define M 20

  void input(int n ,int m, int b[N][M]);
  void output(int n ,int m, int b[N][M]);
  void zamena(int n, int m,int b[N][M]);

  void main(void)
 {
  int n,m;
  int b[N][M];
  clrscr();
  printf("\t\t\t\t");
 
  do
  {
    printf("Ввод соответствующей размерности,то есть n и m:");
    scanf("%d%d",&n,&m);
    if (n>N || n<=0 || m>M || m<=0) printf("Ошибка!\n");
  }
  while (n>N || n<=0 || m>M || m<=0);

  printf("Ввод матрицы B:\n");
  input(n,m,b);

  clrscr();
  printf("Результат:\n");
  output(n,m,b);

  getch();
}

void input(int n, int m,int b[N][M]){
 int i,j;
 for (i=0;i<n;i++)
 for (j=0;j<m;j++)
 {
 printf("Введите элемент b[%d][%d]: ",i,j);
 scanf("%d",&b[i][j]);  }
 }

 void output(int n, int m,int b[N][M]){
 int i,j;
 for (i=0;i<n; i++)   {
    for (j=0;j<m;j++) { printf("%4d",b[i][j]); }
    printf("\n");

   

Это сообщение отредактировал(а) VIvan - 25.4.2006, 12:58
PM MAIL   Вверх
Никто
Дата 25.4.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



int* temp;
int* it;
temp=b[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(temp>b[i][j])
{temp=b[i][j];
it=i;}
for(j=0;j<m;j++)
b[it][j]=0;
По моему так. 
--------------------
   
PM MAIL   Вверх
Rockie
Дата 25.4.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(VIvan @  25.4.2006,  12:48 Найти цитируемый пост)
В матрице размерностью nxm удалить строку, содержащую минимальный элемент.

дело в том, что ты не можешь удалить строку. но можно схитрить и не печатать строку с минимальным элементом. в первом проходе ты ищешь строку с минимальным элементом, а во втором собственно печатаешь матрицу:

Код

 void output(int n, int m,int b[N][M]) 
 { int i,j, min = b[0][0], str = 0;          // FIND STRING WITH MIN     
   for(i=0;i<n;i++)
    for(j=0;j<m;j++)
     { if(min > b[i][j])
       { min = b[i][j];    // min element
         str = i;              // string with min element
       }
     }

   for (i=0;i<n; i++)                          // DISPLAY MATRIX
    { if(i==str) continue; // skip this string
      for (j=0;j<m;j++)
       { printf("%4d",b[i][j]);
       }
      printf("\n");
    }
 }
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
VIvan
Дата 25.4.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



НИКТО, Rockie СПАСИБО БОЛЬШОЕ ! 
PM MAIL   Вверх
VIvan
Дата 6.5.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Rockie @  25.4.2006,  14:03 Найти цитируемый пост)
дело в том, что ты не можешь удалить строку.

 Необходимо именно удалить строку. На тот случай если с массивом будут осуществлять какие-то дальнейшие преобразования... И сделать это без применения continue и brake  smile ... Я в шоке, как сделать если это невозможно  smile  Помогите пожалуйста ... 
PM MAIL   Вверх
MAKCim
Дата 6.5.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Я в шоке, как сделать если это невозможно

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

int* b=(int*) malloc(N*M*sizeof(int));

удалить строку - создать новый массив с кол-вом строк N-1, записать в него элементы из старого массива (кроме элементов удаляемой строки), удалить старый массив (free(b)), значением b сделать адрес нового участка памяти 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
VIvan
Дата 6.5.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я с динамикой еще вообще не работал (не представляю как можно это сделать), а нельзя как-нибудь скопировать все в новый массив кроме определенной строки, в статическом массиве ??? 
PM MAIL   Вверх
VIvan
Дата 6.5.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include <stdio.h>
#include <conio.h>
#define N 15
#define M 20
  void input(int n ,int m, int b[N][M]);
  void output(int n ,int m, int b[N][M], int a[N-1][M]);
  void main(void)

 {
  int n,m;
  int a[N-1][M];
  int b[N][M];
  clrscr();
  do
  {
    printf("Введите размерность матрицы m x n:\n");
    scanf("%d%d",&n,&m);
    if (n>N || n<=0 || m>M || m<=0) printf("ОШИБКА!\n");
  }
  while (n>N || n<=0 || m>M || m<=0);
  input(n,m,b);
  clrscr();
  printf("Результат:\n");
  output(n,m,b,a);
  getch();
}
void input(int n, int m,int b[N][M]){
 int i,j;
 for (i=0;i<n;i++)
 for (j=0;j<m;j++)
 {
 printf("Ввод элемента матрицы b[%d][%d]: ",i,j);
 scanf("%d",&b[i][j]);  }
 }

void output(int n, int m,int b[N][M],int a[N-1][M])
 { int i,j, min = b[0][0], str = 0;
   for(i=0;i<n;i++)
    for(j=0;j<m;j++)
     { if(min > b[i][j])
       { min = b[i][j];
     str = i;  }
     }
   for (i=0;i<n; i++)
      for(i=0;i<n;i++)
       for(j=0;j<m;j++)
    {
    if(i==str);
    else
    a[i][j]=b[i][j];
    }
    printf("%4d", a[i][j]);
    printf("\n");
    }

Выводит только ноль и все. Подскажите пожалуйста где ошибка  smile    

Это сообщение отредактировал(а) VIvan - 6.5.2006, 10:58
PM MAIL   Вверх
CPlusPlusFAN
Дата 6.5.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

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



Цитата(VIvan @  6.5.2006,  10:55 Найти цитируемый пост)
 Подскажите пожалуйста где ошибка

Ошибки:
1) 45 строка (лишний цикл)
2) 53 строка (занеси в else после 50 строки, чтобы выводило всю матрицу, кроме 1 строки, а не 1 значение за границей массива)
Рекомендации:
1) в 4 и 5 строках замени макросы на константы
2) лишние фигурные скобки (41 и 44 строки) 
PM MAIL ICQ Jabber   Вверх
Rockie
Дата 6.5.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(MAKCim @ 6.5.2006,  10:29)
Код

int* b=(int*) malloc(N*M*sizeof(int));

imho у него двумерный массив 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
CPlusPlusFAN
Дата 6.5.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

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



Вот ещё, добавь откр. фигурную скобку между

for(i=0;i<n;i++)

и

for(j=0;j<m;j++)

при исключении ненужной строки (46 и 47 строки) и закр. после

printf("\n");

(54 строка)

Добавлено @ 11:59 
Цитата(Rockie @  6.5.2006,  11:53 Найти цитируемый пост)
у него двумерный массив

А что мешает обращаться к нему так:
b[N*i+j]? 
PM MAIL ICQ Jabber   Вверх
Rockie
Дата 6.5.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(CPlusPlusFAN @  6.5.2006,  11:56 Найти цитируемый пост)
А что мешает обращаться к нему

ничего. кроме того что у него в задании указан вывод матрицы. и лично я логичней вижу двумерный массив в виде mas[row][col], но это мое imho =) в любом случае если ты так создаешь массив, следовало сообщить парню что ему следует переделать все остальные функции.

Добавлено @ 12:38 
то есть если MAKCim создает. 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
VIvan
Дата 6.5.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(CPlusPlusFAN @ 6.5.2006,  11:41)
Цитата(VIvan @  6.5.2006,  10:55 Найти цитируемый пост)
 Подскажите пожалуйста где ошибка

Ошибки:
1) 45 строка (лишний цикл)
2) 53 строка (занеси в else после 50 строки, чтобы выводило всю матрицу, кроме 1 строки, а не 1 значение за границей массива)
Рекомендации:
1) в 4 и 5 строках замени макросы на константы
2) лишние фигурные скобки (41 и 44 строки)


1. 45 строка исправил
2. Лишние скобки убрал
3. 53 строка, как это сделать. У меня вообще ничего там не выводится.
4. Скобки поставил
На данный момент программа ваыдает только нули smile
Массив к сожалению должен быть только двумерным и статическим  

Это сообщение отредактировал(а) VIvan - 6.5.2006, 13:42
PM MAIL   Вверх
Rockie
Дата 6.5.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(VIvan @  6.5.2006,  13:40 Найти цитируемый пост)
сожалению должен быть только двумерным и статическим
к сожелению строку из него не удалить.

полный текст задания
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
VIvan
Дата 6.5.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Полный текcт:
В матрице размерностью nxm удалить строку, содержащую минимальный элемент.
Программа обязательно должна быть написана с использованием функций и должна включать как минимум две функции: формирование матрицы и ее вывод на экран. Максимальная размерность матрицы должна быть такой, чтобы матрица целиком умещалась на экране. При вводе проверять, чтобы размерность не превышала максимальную и была больше нуля. Не использовать continue и brake

Помогите пожалуйста... Хоть через динамические хоть как-нибудь  smile 
 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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