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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2010, 02:34   #1
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию Работа с функцией (С)

Задание - написать функцию обмена елементов одного столбца и строки квадратной матрицы.
Я программу написал, но она работает неправильно, видимо гдето ошибка, помогите, пожалуйста, ее найти и исправить, буду благодарен любой помощи.
Код:
#include <stdio.h>

void func(int *e1, int *e2, int n)
{
    int temp;
    for(int i = 0; i < n; i++)
    {
        temp = *(e1 + i);
        *(e1 + i) = *(e2 + n * i);
        *(e2 + n * i) = temp;
    }
}

main()
{
    int rozm;
    scanf("%i", &rozm);
    int MATR[100][100];
    for (int i = 0; i < rozm; i++)
        for (int j = 0; j < rozm; j++)
            scanf("%i", &MATR[i][j]);
    func(&MATR[0][1], &MATR[1][0], rozm);
    for (int i = 0; i < rozm; i++)
        for (int j = 0; j < rozm; j++)
            printf("%i", MATR[i][j]);

}
ordoss вне форума Ответить с цитированием
Старый 03.01.2010, 11:12   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

здесь одной матрицей не обойтись, объяви дополнительную, в к-рой и будешь менять элементы (а rozm - это номер строки\столбца, к-рые поменять?)

[quote]
int mat[100][100];
for (int i = 0; i < 100; i++)
mat[rozm][i] = matr[i][rozm];
mat[i][rozm] = matr[rozm][i];
[\quote]
но перед этим сделай, чтоб mat = matr
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 03.01.2010, 11:13   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

здесь одной матрицей не обойтись, объяви дополнительную, в к-рой и будешь менять элементы (а rozm - это номер строки\столбца, к-рые поменять?)

[quote]
int mat[100][100];
for (int i = 0; i < 100; i++)
mat[rozm][i] = matr[i][rozm];
mat[i][rozm] = matr[rozm][i];
[\quote]
но перед этим сделай, чтоб mat = matr
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 03.01.2010, 17:30   #4
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
здесь одной матрицей не обойтись, объяви дополнительную, в к-рой и будешь менять элементы

Код:
int mat[100][100];
for (int i = 0; i < 100; i++)
     mat[rozm][i] = matr[i][rozm];
     mat[i][rozm] = matr[rozm][i];
но перед этим сделай, чтоб mat = matr
Мне надо чтоб обмен исполнялся в функции
Цитата:
а rozm - это номер строки\столбца, к-рые поменять?
нет, это размер вводимой матрицы
ordoss вне форума Ответить с цитированием
Старый 03.01.2010, 17:49   #5
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

И еще вопрос, как размещаются в памяти елементы двухмерного масива, например A[3][2], я думал так:
Код:
[0][0],[0][1],[1][0],[1][1],[2][0],[2][1]
ordoss вне форума Ответить с цитированием
Старый 03.01.2010, 18:21   #6
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

твоя ошибка в том, что ты объявил массив размера 100х100. Соответственно e1+n*i это незаполненные элементы той же строки.
Если использовать динамическую память, элементы массива распологаются не по порядку.

Последний раз редактировалось Namolem; 03.01.2010 в 18:24.
Namolem вне форума Ответить с цитированием
Старый 03.01.2010, 18:31   #7
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

А как тогда передать двухмерный масив в функцию, с возможностью работы над его елементами?
ordoss вне форума Ответить с цитированием
Старый 03.01.2010, 18:49   #8
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

использовать для перехода на другую строку вместо n - 100 (для массива 100х100)
Namolem вне форума Ответить с цитированием
Старый 03.01.2010, 19:02   #9
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

Спасибо огромное, до меня наконецто дошло. С меня пиво! =)))

Последний раз редактировалось ordoss; 03.01.2010 в 19:04.
ordoss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с функцией gets (С) spirit_trapper Помощь студентам 2 19.12.2009 01:25
Работа с функцией islower() Greynvi4 Общие вопросы C/C++ 3 07.08.2009 21:37
Задача с функцией Серафимий Долговяз Помощь студентам 7 05.02.2009 08:09
[Assembler]: Размер каталогов и работа с функцией "copy" Roverka Помощь студентам 4 27.11.2008 20:13