Форум: Форум C++Разное
Новые темы: 00
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передача массива в функцию
 
 автор: alex19921992   (28.01.2007 в 12:06)   письмо автору
 
 

Почему не работает? надо передать 2мерный массив в функцию, чтоб она могла изменять
значения элементов массива! размер массива фиксированный 10х16



#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int render(int **a[10][16])
{
for(int i=0;i<10;i++)
for(int j=0;j<16;j++)
{
setcolor(15);
rectangle(10+i*50,10+j*25,10+i*50+40,10+j*25+20);
int color;

if (a[i][j]==0)color=2;
if (a[i][j]==1)color=3;
if (a[i][j]==2)color=4;
setfillstyle(1,color);
floodfill(10+i*50+1,10+j*25+1,15);
}
for(j=0;j<16;j++)
{
char s[2];
itoa(j+1,s,10);
setcolor(15);
outtextxy(505,15+j*25,s);
}
return 0;
}
//-----------
int clearhall(int **a[10][16])
{
for(int i=0;i<10;i++)
for(int j=0;j<16;j++)
{
a[i][j]=0;
}
return 0;
}

//-----------
int drawrame(int i,int j,int c)
{
setcolor(c);
rectangle(10+i*50,10+j*25,10+i*50+40,10+j*25+20);
return 0;
}
//-----------
int changehall(int **hall[10][16])
{
int i=1,j=1;
int nowhall=1;
// int hall[10][16];
// i=1;j=1;
render(hall);
drawrame(i-1,j-1,1);
char ch=0;
while (ch!=27)
{
ch=getch();
if(ch=='H'){drawrame(i-1,j-1,15);if(j>1)j--; drawrame(i-1,j-1,1);}
if(ch=='K'){drawrame(i-1,j-1,15);if(i>1)i--; drawrame(i-1,j-1,1);}
if(ch=='P'){drawrame(i-1,j-1,15);if(j<16)j++;drawrame(i-1,j-1,1);}
if(ch=='M'){drawrame(i-1,j-1,15);if(i<10)i++;drawrame(i-1,j-1,1);}

if(((ch=='Z')||(ch=='z'))&&(hall[i-1][j-1]!=2)){hall[i-1][j-1]=2;render(hall);drawrame(i-1,j-1,1);}
if(((ch=='X')||(ch=='x'))&&(hall[i-1][j-1]==0)){hall[i-1][j-1]=1;render(hall);drawrame(i-1,j-1,1);}
if(((ch=='C')||(ch=='c'))&&(hall[i-1][j-1]!=0)){hall[i-1][j-1]=0;render(hall);drawrame(i-1,j-1,1);}
}

return 0;
}
//----------
int mainmenu(void)
{

return 0;
}
//----------
int main(void)
{
int gd,gm;
gd=DETECT;
initgraph(&gd,&gm,"");

//mainmenu();
int h[10][16];
changehall(h);
closegraph();
}

  Ответить  
 
 автор: cheops   (28.01.2007 в 13:19)   письмо автору
 
   для: alex19921992   (28.01.2007 в 12:06)
 

int **a[10][16] на самом деле является int ****a, если вы хотите передать двумерный массив используйте в качестве аргумента фукнкции просто int **a.

  Ответить  
 
 автор: alex19921992   (28.01.2007 в 13:28)   письмо автору
 
   для: cheops   (28.01.2007 в 13:19)
 

Да что же там за звездочки такие? объясните наконец как передать массив в функцию нормально!

  Ответить  
 
 автор: cheops   (28.01.2007 в 17:05)   письмо автору
 
   для: alex19921992   (28.01.2007 в 13:28)
 

int * - это указатель на значение, т.е. по сути адрес значения можно объявлять указатель на указатель int** и т.д.

  Ответить  
 
 автор: alex19921992   (28.01.2007 в 18:02)   письмо автору
 
   для: cheops   (28.01.2007 в 17:05)
 

А может скажете, как в принципе передать в функцию массив или отладите мою прогу?
(ее смысл - имитация кинотеатра, покупки/бронирования мест )

  Ответить  
 
 автор: cheops   (28.01.2007 в 18:37)   письмо автору
 
   для: alex19921992   (28.01.2007 в 18:02)
 

Массив в функцию можно передать следующим образом
#include <iostream>
using namespace std;

int funct(int *arr, int count);

int main(int argc, char *argv[])
{
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};   

  funct(arr, sizeof(arr)/sizeof(arr[0]));

  for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) cout << arr[i] << endl;

  return 0;
}

int funct(int *arr, int count)
{
  for(int i = 0; i < count; i++) arr[i]++;
  return 0;
}

  Ответить  
 
 автор: cheops   (28.01.2007 в 19:13)   письмо автору
 
   для: alex19921992   (28.01.2007 в 18:02)
 

Двумерный массив можно передать следующим образом
#include <iostream>
using namespace std;

int funct(int **arr);

int main()
{
  int arr[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};   
  int *prt = &arr[0][0];

  funct(&prt);

  for(int i = 0; i < 2; i++)
  {
    for(int j = 0; j < 5; j++) cout << arr[i][j] << endl;
  }

  return 0;
}

int funct(int **arr)
{
  for(int i = 0; i < 2; i++)
  {
    for(int j = 0; j < 5; j++) arr[i][j]++;
  }

  return 0;
}

  Ответить  
 
 автор: alex19921992   (02.02.2007 в 19:20)   письмо автору
 
   для: cheops   (28.01.2007 в 19:13)
 

У меня код вообще в борланд си не работает, полмассива не обнуляется)))))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования