Модераторы: 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   Вверх
bsa
Дата 6.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Код

#include <stdio.h>
#include <malloc.h>
#include <string.h>

int * input_matrix(void);
void print_matrix(const int * matrix);
int * delete_row(const int * matrix, int r);
int get_low_row(const int * matrix);

int main() {
    int *src, *dst;
    src = input_matrix();
    if ( src != NULL ) {
        printf("Input matrix is\n");
        print_matrix( src );
        dst = delete_row( src, get_low_row( src ) );
        if ( dst != NULL ) {
            print_matrix( dst );
            free( dst );
        }
        free( src );
    }
    return 0;
}

int * input_matrix(void) {
    int m, n, i, j;
    int * matrix;
    do {
        printf("Input matrix width:\n");
        scanf("%d", &m);
        if ( m <= 0 )
            fprintf(stderr, "Invalid value\n");
    } while( m <= 0 );
    do {
        printf("Input matrix height:\n");
        scanf("%d", &n);
        if ( n <= 0 )
            fprintf(stderr, "Invalid value\n");
    } while( n <= 0 );
    matrix = (int*)malloc( (m * n + 2) * sizeof(*matrix) );
    matrix[0] = m;
    matrix[1] = n;
    for( i = 0; i < n; ++i ) {
        int * p = matrix + ( m * i + 2 );
        for( j = 0; j < m; ++j, ++p ) {
            printf("Input M[%d;%d]:\n", i, j);
            scanf("%d", p);
        }
    }
    return matrix;
}

void print_matrix(const int * matrix ) {
    int i,j, m, n;
    if ( matrix != NULL ) {
        m = matrix[0];
        n = matrix[1];
        matrix += 2;
        for( i = 0; i < n; ++i ) {
            for( j = 0; j < m; ++j, ++matrix )
                printf( "%d ", *matrix );
            printf("\n");
        }
    }
}

int get_low_row(const int * matrix) {
    int m,n,i,j,k,t;
    if ( matrix != NULL ) {
        m = matrix[0];
        n = matrix[1];
        matrix += 2;
        k = 0;
        t = *matrix;
        for( i = 0; i < n; ++i ) {
            const int * p = matrix + i * m;
            for( j = 0; j < m; ++j, ++p ) {
                if ( *p < t ) {
                    t = *p;
                    k = i;
                }
            }
        }
    }
    return k;
}

int * delete_row(const int * matrix, int r) {
    int * result = NULL;
    if ( matrix != NULL ) {
        result = (int*)malloc( matrix[0] * ( matrix[1] - 1 ) * sizeof( *matrix ) + 2 );
        result[0] = matrix[0];
        result[1] = matrix[1] - 1;
        if ( r > 0 )
            memcpy( result + 2, matrix + 2, r * matrix[0] * sizeof(*matrix) );
        memcpy(result + 2 + r * matrix[0], matrix + 2 + (r + 1) * matrix[0], (matrix[1] - r - 1) * matrix[0] * sizeof(*matrix) );
        
    }
    return result;
}

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


Новичок



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

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



У меня похожая задачка. Транспонировать матрицу надо... 

Это сообщение отредактировал(а) Josh - 6.5.2006, 18:36
PM MAIL   Вверх
MAKCim
Дата 6.5.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

У меня похожая задачка. Транспонировать матрицу надо... 

где связь между ними? 


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

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Josh, решение - проще некуда! Даже пример приводить не хочу! 
PM   Вверх
Rockie
Дата 6.5.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Josh, транспонирование матриц
Код
#include <conio.h>
#include <stdio.h>
#include <iostream.h>

int main() {
int **mas;                 // array
int **t_mas;               // transposed array
int rows = 0, cols = 0;
cout<<"rows: "; cin>>rows;
cout<<"cols: "; cin>>cols;

mas = new int * [rows];    // memory for array
for(int i = 0; i < rows; i++)
 { mas[i] = new int[cols];
 }

t_mas = new int * [cols];  // memory for transposed array
for(int i = 0; i < cols; i++)
 { t_mas[i] = new int[rows];
 }

for(int i = 0; i < rows; i++) // filling array with 10
 {  for(int j = 0; j < cols; j++)
   { mas[i][j] = 10;
   }
 }

cout<<'\n';

for(int i = 0; i < rows; i++) // display array
 { for(int j = 0; j < cols; j++)
   { cout<<mas[i][j]<<' ';
   }
   cout<<'\n';
 }

for(int i = 0; i < cols; i++) // transposing array
 {  for(int j = 0; j < rows; j++)
   { t_mas[i][j] = mas[j][i];
   }
 }

cout<<'\n';

for(int i = 0; i < cols; i++) // display array
 { for(int j = 0; j < rows; j++)
   { cout<<t_mas[i][j]<<' ';
   }
   cout<<'\n';
 }

getch();
return 0;
}
 


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


Новичок



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

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



Сейчас вот разбираюсь с программкой bsa и вот эти три момента никак не могу понять:

[/quote]
Код

 m = matrix[0];
        n = matrix[1];
        matrix += 2;
        k = 0;
        t = *matrix;


Код

result = (int*)malloc( matrix[0] * ( matrix[1] - 1 ) * sizeof( *matrix ) + 2 );
        result[0] = matrix[0];
        result[1] = matrix[1] - 1;


Код

 memcpy( result + 2, matrix + 2, r * matrix[0] * sizeof(*matrix) );
        memcpy(result + 2 + r * matrix[0], matrix + 2 + (r + 1) * matrix[0], (matrix[1] - r - 1) * matrix[0] * sizeof(*matrix) );


кому не трудно, разьясните что к чему. Буду очень благодарен
PM MAIL   Вверх
MAKCim
Дата 24.8.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

Помогите пожалуйста... Хоть через динамические хоть как-нибудь

Код

typedef int int_t;

int_t* create_matrix(size_t rows, size_t colums)
    { return malloc(rows*colums*sizeof(int_t)); }

void destroy_matrix(int_t* ptr)
    { if (ptr!=NULL) free(ptr); }

int_t get(size_t i, size_t j, size_t colums, int_t* matrix)
    { return matrix[i*colums+j]; }

void set(size_t i, size_t j, size_t colums, int_t* matrix, int_t elem)
    { matrix[i*colums+j]=elem; }

size_t find(int_t* matrix, size_t rows, size_t colums)
{
    size_t i, j, k;
    int_t value=get(0,0,colums,matrix), p;
    for (i=0; i<rows; ++i)
        for (j=0; j<colums; ++j)
            if ((p=get(i,j,colums,matrix))<value) k=i, value=p;
    return k;
}

void delete_element(int_t** matr_ptr, size_t rows, size_t colums)
{
    int_t* matrix=create_matrix(rows-1,colums);
    size_t deleted=find(*matr_ptr,rows,colums), i=0, j, k;
    for (; i<rows; ++i)
    {
        if (i<deleted) k=i;
        else if (i>deleted) k=i-1;
        else continue;
        for (j=0; j<colums; ++j) set(k,j,colums,matrix,get(i,j,colums,*matr_ptr));
    }
    destroy_matrix(*matr_ptr);
    *matr_ptr=matrix;
}



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

PM MAIL   Вверх
Josh
Дата 25.8.2006, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Повторю свой последний топик...
PM MAIL   Вверх
Oleg_Ci
Дата 25.8.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


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

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



Цитата(Josh @  24.8.2006,  22:23 Найти цитируемый пост)
Сейчас вот разбираюсь с программкой bsa и вот эти три момента никак не могу понять:
Код

m = matrix[0];  // ширина матрицы
n = matrix[1];   // высота матрицы
matrix += 2;     // перемещаем указатель на начало данных
k = 0;               // номер строки где содержится минимальный элемент (число)
t = *matrix;       // в 't' теперь первое число из матрицы ( верхнее левое число в квадратной матрице 'matrix[0][0]' )
Код

result = (int*)malloc( matrix[0] * ( matrix[1] - 1 ) * sizeof( *matrix ) + 2 );
result[0] = matrix[0];        // ширина
result[1] = matrix[1] - 1;  // высота "без одной строки"
По русски как-то так прочитать можно:
выделяем память (под масив) такой-то ширины (matrix[0]) такой-то высоты (matrix[1] - 1), для того чтоб скопировать первоначальный массив туда, но без одной строки, поэтому на одну строку меньше. Умножение ширины на высоту и на "разменость" smile  ( количество байт под число ) (sizeof( *matrix ))  - даёт необходимый размер памяти, прибавлям 2, для двух чисел - ширина и высота.
Код

memcpy( result + 2, matrix + 2, r * matrix[0] * sizeof(*matrix) );//до удаляемой строки
memcpy(result + 2 + r * matrix[0], matrix + 2 + (r + 1) * matrix[0], (matrix[1] - r - 1) * matrix[0] * sizeof(*matrix) );// после удаляемой строки до конца
Здесь два раза копируем память. Результат должен-быть без одной строки, поэтому первый раз копируем строки от первой до той которую надо удалить, а второй раз копируем от удаляемой до последней. Тоесть копируем массив, но не весь, без одной строки.


PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0835 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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