Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 957
от 05.01.2008, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 471, Экспертов: 51
В номере:Вопросов: 3, Ответов: 6

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 116450: Здравствуйте. Я не совсем хорошо ещё разбираюсь в С++, поэтому прошу помощи... У меня задание прстое - дан массив и надо к каждому члену обратиться через указатель. В одномерном это просто, а вот как это сделать в двумерном??? Подскажите плз. Тут же ...
Вопрос № 116465: Здравствуйте! Что означает запись: int ***X[2][3][4]; и почему она возможна в Си? Как использовать такое "чудо"?...
Вопрос № 116475: Уважаемые господа, пытаюсь освоить Microsoft Visual C++ 2008, дайте пожалуйста ссылки на на примеры программ и учебники, прошу обратить ваше внимание что среда разработки для меня абсолютно не знакома, посему хотелось бы иметь примеры именно для МV C...

Вопрос № 116.450
Здравствуйте. Я не совсем хорошо ещё разбираюсь в С++, поэтому прошу помощи... У меня задание прстое - дан массив и надо к каждому члену обратиться через указатель. В одномерном это просто, а вот как это сделать в двумерном??? Подскажите плз. Тут же пример с одномерным.

Приложение:

Отправлен: 30.12.2007, 23:00
Вопрос задал: Яроц А.С. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Maksim Trofimov
Здравствуйте, Яроц А.С.!

Наиболее часто реализуемым способом размещения многомерного массива является смежное представление (подобно одномерному).

Вот пример на С++:
#include <iostream>

int main(void)
{
int i, j;
const unsigned arr_size = 32;
int arr1[arr_size];
int arr2[arr_size][10];

// заполняем и выводим одномерный...
for(i = 0; i < arr_size; i++) {
arr1[i] = i;
std::cout << *(arr1 + i) << " ";
}
std::cout << " ";

// заполняем и выводим двумерный...
for(i = 0; i < arr_size; i++)
{
for(j = 0; j < 10; j++) {
arr2[i][j] = i;
std::cout << *(*(arr2 + i) + j) << " ";
}
std::cout << std::endl;
}

return 0;
}
Ответ отправил: Maksim Trofimov (статус: 2-ой класс)
Ответ отправлен: 31.12.2007, 05:52

Отвечает: Попов А.С.
Здравствуйте, Яроц А.С.!
x + (номер строки)*(кол-во столбцов) + (номер элемента в строке)

например:
n - кол-во столбцов
m - кол-во строк

int x[n][m];

for (i=0; i<n; ++i)
for (j=0; j<m; ++j)
*(x + i*m + j)=rand()%10;
Ответ отправил: Попов А.С. (статус: 3-ий класс)
Ответ отправлен: 31.12.2007, 06:55


Вопрос № 116.465
Здравствуйте!
Что означает запись: int ***X[2][3][4]; и почему она возможна в Си?
Как использовать такое "чудо"?
Отправлен: 31.12.2007, 02:05
Вопрос задал: X-men (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Maksim Trofimov
Здравствуйте, X-men!

#include <stdio.h>
int main(void)
{
int i, j, k;
// это чудо есть трехмерный массив указателей на указатели на указатели на тип int
int ***x[2][3][4];
// ...и чтобы им можно было пользоваться нужно, конечно, выделить память сначала
// для int*** , потом для int** ,и наконец для int*
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 4; k++)
x[i][j][k] = (int ***)malloc(sizeof(int **));

for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 4; k++)
*x[i][j][k] = (int **)malloc(sizeof(int *));

for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 4; k++)
**x[i][j][k] = (int *)malloc(sizeof(int));

// ну а теперь заполним и выведем массив
for(i = 0; i < 2; i++) {
for(j = 0; j < 3; j++) {
for(k = 0; k < 4; k++) {
***x[i][j][k] = i+j+k;
printf("%d ", ***x[i][j][k]);
}
puts("");
}
puts("");
}

return 0;
}
Ответ отправил: Maksim Trofimov (статус: 2-ой класс)
Ответ отправлен: 31.12.2007, 08:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо за пример программы! Хотя и не понятно, для чего такое нужно.

Отвечает: kool
Здравствуйте, X-men!
А то и означает что написано
int ***X[2][3][4];
Трехмерный массив типа int ***
Этот тип представляет собой
указатель на указатель кот. сам
указывает на указатель.
Использование зависит от того чего вы хотите
но я таких конструкций не встречал
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 31.12.2007, 10:53
Оценка за ответ: 3


Вопрос № 116.475
Уважаемые господа, пытаюсь освоить Microsoft Visual C++ 2008, дайте пожалуйста ссылки на на примеры программ и учебники, прошу обратить ваше внимание что среда разработки для меня абсолютно не знакома, посему хотелось бы иметь примеры именно для МV C++ 2008 а не 2003 например, с коим я уже повозился и после несоответствий в интерфейсе примеров дело застопорилось, заранее спасибо.
Отправлен: 31.12.2007, 05:22
Вопрос задал: Spooked (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Maksim Trofimov
Здравствуйте, Spooked!

К вашему сожелению, среда слишком новая и поэтому в интернете много информации пока найти нельзя, как и купить книгу. В VC 2008 не так много нового и измененного... Вы можете почитать книги по 2005.
Ответ отправил: Maksim Trofimov (статус: 2-ой класс)
Ответ отправлен: 31.12.2007, 08:56

Отвечает: kool
Здравствуйте, Spooked!
Может у вас были не те примеры
Посмотрите
firststeps.ru
Хороший сайт
А еще лучше купить небольшой справичник,
чтобы был всегда под рукой
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 31.12.2007, 10:53


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.68 от 04.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное