два вопроса

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

два вопроса

Сообщение Физик » 26.06.2006 13:16:52

С удовольствием использую Free Pascal для научных расчётов, однако не имею достаточного опыта в пограммировании,
поэтому прошу уважаемых форумчан ответить на 2 вопроса.

1. Со школьной скамьи слышу, что использование опрератора goto - дурной тон в программировании. Но никто и никогда
не конкретизировал почему? Может кто-то из программистов знает ответ, чем хуже программа с операторами goto аналогичной
программы без этих опрераторов.

2. С точки зрения экономии оперативной памяти есть ли разница, когда используешь один N-мерный массив или
N одномерных массивов?

Заранее спасибо.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение Alexander » 26.06.2006 15:29:16

1 Почитай книги Вирта.
В жизни использовать можно, но только когда это единственно удобно.
А в остальных случаях не стоит. Хуже программа не станет, можно даже
выиграть в скорости. А вот структура ухудшится.

2 Настолько незначительная, что можно не учитывать. По крайней
мере для малого числа больших массивов.

Если наврал поправте.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 723
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение virt » 01.07.2006 12:16:02

2.
пусть M количество элементов в каждом массиве ,тогда :
Nмерный занимает M^N ,а N одномерных - M*N.
virt
новенький
 
Сообщения: 35
Зарегистрирован: 01.12.2005 12:31:41

Сообщение Alexander » 01.07.2006 18:41:03

Если я правильно понял вопрос, то M в обоих случаях одинаково.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 723
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение cro096 » 02.07.2006 07:09:52

Чего-то я не понял, как N-мерный массив связан с N одномерных?
N одномерных массивов это
array[0..N-1, M1..M2] of T_MyType // читай, двумерный массив
// а N мерный массив это
array [0..m1-1, 0..m2-1,0..m3-1, {так много раз}, 0..mN-1] of T_MyType.
И еще, в Дельфе, если я не ошибаюсь, где-то была ссылочка, что максимум можно создать семимерный массив. (N=7)
типа,
array [0..1,0..2,0..3,0..4,0..5,0..6,0..7] // работает,

array [0..1,0..2,0..3,0..4,0..5,0..6,0..7,0..8] // уже не работает.
при попытке выполнить процедуру вызывает СтекОверфлоу и выпадает.



В общем, если речь идет о N массивов 0..M или один
[0..N-1, 0..M] то разницы никакой.
Все равно, массив- есть указатель на область памяти, а номер элемента- это смещение относительно начала этого массива.
N массивов- N указателей.
1 массив- те же самые N указателей, только лежащие кучкой.
cro096
незнакомец
 
Сообщения: 5
Зарегистрирован: 31.12.2005 12:56:46

Сообщение Физик » 02.07.2006 11:21:14

cro096 писал(а):В общем, если речь идет о N массивов 0..M1 или один
[0..N-1, 0..M2] то разницы никакой.
Все равно, массив- есть указатель на область памяти, а номер элемента- это смещение относительно начала этого массива.
N массивов- N указателей.
1 массив- те же самые N указателей, только лежащие кучкой.


Согласен, однако, на практике, по крайней мере при работе с Фортраном, если используешь большие М, то в первом случае удаётся использовать М1 больше чем M2. Т.е N одномерных массивов позволяют использовать больше элементов, чем один N-мерный массив.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение Alexander » 02.07.2006 19:24:18

В ФП есть ещё и динамические массивы.

Код: Выделить всё
{$LONGSTRINGS ON}

  var
      a : array of array of array of array of array of array of array of array of array of array of array of array of string;

begin


end.


И каждый элемент имеет произвольную, изменяемую
динамически размерность. А количество элементов в одном, наверное,
2^32 или 2^31. Много в общем. Никакой памяти не хватит. :)
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 723
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение pda » 02.07.2006 23:43:38

Alexander писал(а):Много в общем. Никакой памяти не хватит. :)

В таких случаях надо читать мены или Рихтора и переходить на разряженные массивы... ;-)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

старая

Сообщение Физик » 27.07.2006 17:04:11

Как всё таки, на счёт меток...

Вопрос конкретизирую: влияет ли большое (опять вопрос на сколько большое) наличие операторов goto на CPU time.

P.S. нет времени самому экспериментальным путём проверить, может кто нибудь уже имеет опыт - проверял.
Физик
новенький
 
Сообщения: 28
Зарегистрирован: 26.06.2006 12:42:33

Сообщение SovNarKom » 27.07.2006 17:48:30

В принцципе goto ->незначительно<- ускоряет работу, если он работает в циклах, однако он значительно портит структуру программы.
В случае, если скорость критична - нужно использовать asm вставки.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение shade » 27.07.2006 19:31:35

Как всё таки, на счёт меток...

Вопрос конкретизирую: влияет ли большое (опять вопрос на сколько большое) наличие операторов goto на CPU time.

P.S. нет времени самому экспериментальным путём проверить, может кто нибудь уже имеет опыт - проверял.

На CPU-time, если и влияет, то не значительно (а насчет направления у меня есть сомнения, как и насчет использования ассемблерных вставок - см. ниже).
А вот на МОЗГИ-time влияет значительно, поэтому в целях повышения вашей (а не программы) производительности, лутше переходить на структурное программирование.

А если у вас проблемы со скоростью работы программы, то:

Есть три уровня оптимизации:
1. Высокий уровень - поиск принициально нового алгоритма.
2. Средний уровень - оптимизация алгоритма (учет особенностей компилятора, платформы...) - имеет смысл если скорость немного не устраивает, иначе см. п.1.
3. Низкий уровень - ассемблер: этот уровень лутше возложить на компилятор - в большинстве случаев хороший оптимизирующий компилятор сделает это быстре и лутше вас - исключение использование возхможностей CPU, не поддерживаемых компилятором (н-р MMX, SSE и т.д и т.п.)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru