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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2011, 12:21   #11
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2An1ka
неудобно будет получать доступ к элементам
matrix_array[i].m[0][0]?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.07.2011, 23:36   #12
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2An1ka
неудобно будет получать доступ к элементам
matrix_array[i].m[0][0]?
По мне так удобно и наглядно. И передавать струтуру / ссылку на структуру в какие нибудь функции удобнее, чем квадратный массив
И слово "m" можно заменить на "element" в структуре и получится:
matrix_array[i].element[0][0] такая-то матрица, такой-то элемент.

Последний раз редактировалось An1ka; 30.07.2011 в 23:42.
An1ka вне форума Ответить с цитированием
Старый 31.07.2011, 03:55   #13
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2An1ka
структура с одним полем моветон. потенциальные выравнивания нам незачем. хотя как вариант, конечно

Цитата:
И передавать струтуру / ссылку на структуру в какие нибудь функции удобнее, чем квадратный массив
Код:
#include <stdio.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

typedef int (*matrix)[2];

static int arr[][2][2] = {
    {
        { 0, 0 },
        { 1, 1 }
    },
    {
        { 1, 1 },
        { 2, 2 }
    },
    {
        { 2, 2 },
        { 3, 3 }
    },
};

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

int main()
{
    int i;
    for (i = 0; i < ARRAY_SIZE(arr); i++) {
        print_matrix(arr[i]);
        printf("-----------------------------\n");
    }
    return 0;
}
неудобно?)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 31.07.2011 в 04:59.
pproger вне форума Ответить с цитированием
Старый 31.07.2011, 11:47   #14
Vladislava-smile
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 10
По умолчанию

Ребят, всем спасибо, но мне двойной массив понятней и удобней. Я тут с другим зациклена. У меня функция atoi тупит. Почему? Понять не могу.
Код:
{
int K[4][5183];
int L[20736];
int iFileHandle;
int iFileLength;
int iBytesRead;
char *pszBuffer;
iFileHandle = FileOpen("1296.txt", fmOpenRead);
iFileLength = FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
pszBuffer = new char[iFileLength+1];
iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
//Memo1->Lines->Add(pszBuffer);
//Memo1->Lines->Add(iFileLength);
int i, j, t=0, y=0, r=0;
char str[2];
I:

for (i=y; i<iFileLength; i++)
{
if (pszBuffer[i]==' ')
        {
        int e=atoi(str);
        L[r]=e;
        r++;
        y=i+1;
        str[0]=' ';
        str[1]=' ';
        t=0;
        if (y<iFileLength) goto I;
        }
else
        {
        str[t]=pszBuffer[i];
        t++;
        }
}
y=0;  r=0;
do
{
for(i=0; i<4; i++)
        {
        for (j=y; j<(y+4); j++)
                {
                K[i][j]=L[t];
                t++;
                }
        }
y=y+4;
} while (y<5184);

for (i=0; i<4; i++)
        {
        for (j=0; j<48; j++)
        {
        sg3->Cells[j][i]=L[r];
        r++;
        }
        }
}
Вот здесь
int e=atoi(str);
L[r]=e;
проверяю по меткам (по которым можно проследить выполнение проги), все работает верно до 49 цифры, а потом к 2-м первым цифрам приписывается не понятно откуда взятый еще один. Но при проверке на месте str высвечивается 16, а в е уже 160. В чем может быть проблема?

Последний раз редактировалось Stilet; 31.07.2011 в 19:41.
Vladislava-smile вне форума Ответить с цитированием
Старый 01.08.2011, 07:22   #15
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Vladislava-smile Посмотреть сообщение
Ребят, всем спасибо, но мне двойной массив понятней и удобней.
Если квадратный массив, то matrix_array[1296][16];
Цитата:
Сообщение от Vladislava-smile Посмотреть сообщение
Я тут с другим зациклена. У меня функция atoi тупит. Почему? Понять не могу.
Всё зависит от того как элементы распологаются в файле из которого считывание идет.
Код:
#include <fstream>
#include <cstdlib>
 void create ( int mat[1296][16])
{
	for ( int i =0; i < 1296; i++)
	  for ( int m =0; m < 16; m++ )
		mat[i][m] = rand( ) % 100;
}
 void write ( int mat[1296][16])
{
	std::ofstream file ( "mymatrix.txt");
	if ( !file) return;
	for ( int i =0; i < 1296; i++)
	{
		for ( int m =0; m < 16; m++)
		{
			file << mat[i][m];
			file.put ( ' ');
		}
		file.put ( '\n');
	}
	file.close( );
}
 void read ( int mat[1296][16])
{
	std::ifstream file ( "mymatrix.txt");
	if ( !file) return;
	for ( int i =0; i < 1296; i++)
	{
		for ( int m =0; m < 16; m++)
		{
			file >> mat[i][m];
			file.ignore( );
		}
		file.ignore( );
	}
	file.close( );
}
int main() {
  srand ( time (0));
  int matrix [1296][16];
  create ( matrix);
  write ( matrix);
  read ( matrix);
  return 0;
}
Идея понятна ? И никаких atoi не надо.
An1ka вне форума Ответить с цитированием
Старый 01.08.2011, 08:21   #16
Vladislava-smile
Пользователь
 
Регистрация: 29.07.2011
Сообщений: 10
По умолчанию

Идея понятна, НО:
1) там все-таки 4 строки потому что у меня 1296 матриц размерности 4 на 4, и они тупо сохраняются подряд.
2) Все эти 1296 матриц сохранены в текстовом файле, записанные там по строкам. Все элементы записаны через пробел. Соответственно, чтобы они стали числами, а ни строками я юзаю функцию atoi, но элементы массива состоят из 1 или 2 цифр. И встречая пробел, мы как раз переводим в число, все обнуляем и возобновляем цикл (не сначала конечно).
Поэтому я не могу без atoi.
Vladislava-smile вне форума Ответить с цитированием
Старый 24.08.2011, 11:30   #17
HollyPaladin
Пользователь
 
Аватар для HollyPaladin
 
Регистрация: 29.11.2009
Сообщений: 51
По умолчанию

Вот так:
Код:
int M[1296][4][4]
HollyPaladin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подкиньте идею ilsen Помощь студентам 3 15.11.2010 16:52
подкиньте идею ronny137 Помощь студентам 4 03.05.2010 00:22
Подкиньте идею... Egik_net Microsoft Office Access 9 18.10.2009 01:08
Подкиньте идею, пожайлуста frankk Общие вопросы C/C++ 2 08.06.2008 19:15