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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2014, 19:41   #1
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию Принцип работы с двумерным массивом

Задачу решил через указатели, но знал как правильно выводить, посоветовал вот так: num[t][i] = (t*4)+i+1; Все работает, но я не понимаю почему именно так?Почему умножается на 4 + i +1 - что это?Есть ли способ сделать проще?
И еще вопрос.(*num)[size][size] - это указатель на двумерный массив?Почему обязательно нужно указывать кол-во измерений?
Задание: Дана вещественная матрица А (8х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех столбцов, кроме последнего.
Решение:
Код:
#include <stdio.h>
#define size 10
int main(void)
{
int t,i, n=8, (*num)[size][size], a[size][size];
num=&a;

printf("%d\n", sizeof(num));
for(t=0; t<8; ++t)
for (i=0; i<8; ++i)
*num[t][i] = (t*4)+i+1;
n = 8;
for (i = 0; i < n - 1; ++i)
for (t = 0; t < n - 1; ++t)
*num[i][t] -= *num[n - 1][i];
for (i = 0; i < n - 1; ++i)
*num[n - 1][i] -= *num[n - 1][n - 1];
for (t=0; t<8; ++t)
{
for (i=0; i<8; ++i)
printf("%d  ",*num[t][i]);
printf ("\n");
}
return 0;
}
East Undia Trading вне форума Ответить с цитированием
Старый 10.03.2014, 20:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

4 потому что тип int - 4 байта.
Можно было написать: (t*sizeof(int))+i+1;
Только имхо формула такая: Строка*КолВоКолонок + НомерКолонки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2014, 20:44   #3
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Stilet, ммм.
А можно еще узнать, почему нужно указывать измерения указателя или ненужно?В общем вот эта запись верна (*num)[size][size]?
East Undia Trading вне форума Ответить с цитированием
Старый 10.03.2014, 21:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну насчет указания измерений таким способом ты должен прекрасно понимать, что в качестве размерности должна выступать именно константа (как в примере), не все компиляторы так просто поддержат создание динмассива, если передавать им переменные.
Насчет нужно или не нужно это решать только тебе. Не укажешь размеры придется резервировать память через new или malloc(). Короче говоря нет никакой разницы. Как удобно будет так и пиши.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2014, 22:19   #5
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Stilet, спасибо большое теперь понятнее стало.
East Undia Trading вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс для работы с двумерным массивом целых чисел (C++) Leno4ka805 Помощь студентам 2 29.11.2013 09:19
Работа с двумерным массивом novak3 Общие вопросы C/C++ 8 06.05.2011 03:15
трудности с двумерным массивом LuBuMaster Общие вопросы C/C++ 11 03.12.2009 19:01
Помогите с двумерным массивом в С++ Vultar Помощь студентам 11 12.11.2009 18:28
Задача с двумерным массивом. svobodys Помощь студентам 3 13.12.2008 15:44