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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 20:59   #1
Hornet_nsk
 
Регистрация: 04.02.2012
Сообщений: 7
По умолчанию Как в Си использовать двумерный массив в качестве аргумента функции?

Столкнулся с такой задачей (язык Си).
Для квадратной матрицы нужно посчитать ее симметричную часть S(ij)=(A(ij)+A(ji))/2 и выполнить это нужно в виде отдельной функции. В принципе ничего сложного, но как квадратную матрицу сделать параметром функции?
если, допустим на одномерный массив можно сделать в виде
void Sim (int * x) и никаких проблем нет, то с двумерным массивом такое уже не получается.
Hornet_nsk вне форума Ответить с цитированием
Старый 04.02.2012, 21:06   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Передавайте по ссылке.
void Sim (&x)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.02.2012, 23:08   #3
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
void Sim (int * x) и никаких проблем нет, то с двумерным массивом такое уже не получается.
Там два варианта. Если вы используете диманический массив, то там всё банально
Код:
void Sim(int** mas, int Rows, int Cols)
Где Rows и Cols размерности по горизонтали и вертикали.

Если используете обычные массивы, то там как-то хитрее сейчас уже не вспомню. Что-то примерно такое
Код:
void Size(int*[][SIZE] mas, int Rows, int Cols)
Попробуйте, но работоспособность не гарантирую. SIZE - Это размерность по вертикали вроде. Хотя я уже ХЗ, давно не писал на Си.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 05.02.2012 в 00:41.
MooNDeaR вне форума Ответить с цитированием
Старый 04.02.2012, 23:25   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Smitt&Wesson

Передавайте по ссылке.

В Си нет ссылок. oO
Забыли завезти, вот такая вот пичалька... ):


Hornet_nsk

как квадратную матрицу сделать параметром функции?

Передавай указатель на матрицу

Код:
void Sim(int (*m)[4][4])
{
   // внутри юзаешь двойной цикл 0..3
}

int m[4][4];
Sim(&m);
Rififi вне форума Ответить с цитированием
Старый 04.02.2012, 23:35   #5
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

можно использовать одномерный массив как двумерный
int *mass = new int(X*Y);

func(int row,col)
mass[Y*row+x]=.....
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 05.02.2012, 06:43   #6
Hornet_nsk
 
Регистрация: 04.02.2012
Сообщений: 7
По умолчанию

Попробовал такой вариант
Код:
#include <stdio.h>
#include <stdlib.h>
#define n 5
int i,j,m[n][n],S[n][n];
void Sim (int (*m)[n][n])
{for (i=0;i<n;i++)
  {for (j=0;j<n;j++)
   S[i][j]=m[i][j];}}
main ()
{ randomize();
  for (i=0;i<n;i++)
    {for (j=0;j<n;j++)
    m[i][j]=random(50);}
  Sim (&m);
}
При компиляции пишет: cannot assign 'int far*' to 'int' in function Sim(int [5][5] far*)
Hornet_nsk вне форума Ответить с цитированием
Старый 05.02.2012, 09:23   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Rififi В Си нет ссылок. oO
Забыли завезти, вот такая вот пичалька... ):
Вы правы. Я не глянул, что человеку нужени C, а не С++ .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.02.2012, 09:46   #8
Hornet_nsk
 
Регистрация: 04.02.2012
Сообщений: 7
По умолчанию

спасибо всем за ответы.
в итоге сделал так:
void Sim (int x[][n]) и все волшебным образом заработало
Hornet_nsk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавлять в метод в качестве аргумента структуру в C# Linore C# (си шарп) 0 07.10.2011 10:17
Имя функции в качестве аргумента Artem_Kokos Помощь студентам 1 25.04.2011 00:20
Как массив передать в качестве аргумента функции Mixim C# (си шарп) 7 10.03.2011 09:53
можно ли в качестве аргумента функции использовать имя текстового файла Arassir Общие вопросы Delphi 2 31.05.2010 23:12
Как сделать чтобы двумерный массив который создается в функции можно было использовать в других функциях Olya90 Помощь студентам 4 20.04.2009 18:39