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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 12:12   #11
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
Задача.
Заполнить массив случайными числами, отсортировать. Вывести наибольшее число. Заполнить массив числами (1,3,4,2,3), отсортировать. Вывести наибольшее число. Использовать один массив. Данные вводить программно (без Read, файлов и тп).
ну и зачем тут массив обьявленный как константа?
Код:
var массив:array[1..5] of integer;
.....
begin
//заполняем массив random
//сортируем его
//выводим на экран
//массив[1]:=1;массив[2]:=3 и далее по тексту
//выводим на экран
//сортируем
//выводим на экран
end.
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 12.12.2009, 12:19   #12
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Два вопроса
1. в чем принципиальное отличие
этого
//массив[1]:=1;массив[2]:=3 и далее по тексту
и объявления константы через const

2. Какой вариант лучше?
Armorer вне форума Ответить с цитированием
Старый 12.12.2009, 12:39   #13
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

на второй вопрос - именно для этой задачи мой вариант!
и на первый вопрос-
если вы обьявите массив через константу заполнить его по рандому вы не сможете ==> обьявление массива в константах повлечет использование еще одного массива для выполнения первых 2-х действий, а в условии задачи использовать 2 массив запрещено
и еще попробуйте вот этот код
Код:
  const b:array[1..5] of integer=(0,1,2,3,4);
  var
   a:array[1..5] of integer;
   i:integer;
  begin
  a:=b;// вот тут делфи начнет ругаться incompatible types
  for i:=1 to 5 do
   write(a[i]:5);
   readln;
end.
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»

Последний раз редактировалось IT-man; 12.12.2009 в 12:48.
IT-man вне форума Ответить с цитированием
Старый 12.12.2009, 13:11   #14
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Цитата:
обьявление массива в константах повлечет использование еще одного массива для выполнения первых 2-х действий, а в условии задачи использовать 2 массив запрещено
Это верно. Я не подумал что кто-то приравняет констату-массив к массиву. Можно уточнить что нельзя использовать два массива-переменные.

Но с с остальным я не согласен.

Принципиальной разницы между двумя вариантами нет, и в том случае и в другом будут созданы несколько байт(зависит от типа) в памяти которые, не извращаясь, изменить в паскале будет нельзя, они будут константами.

Только в первом случае они будут идти подряд и у нас будет их адрес для использования (название константы), а во втором они идут не друг за другом и использовать их второй раз нельзя.

Суть одна, но в общем случае эффективнее первый способ.
Вот некоторые причины:

1. Если понадобится заполнить массив второй раз этими же числами:
в 1м случае используем туже константу. Во втором все эти числа будут дублироваться в программном коде.
=> в первом случае размер программы меньше.

2. Чтобы заполнить массив в 1мслучае нужно выполнить одну операцию (копирование блока памяти). Во втором n операций, придется копировать каждой число отдельно.
=> Теоретически первый случай будет быстрее.

Все, конечно, зависит от компилятора но в паскале и в статических массивах на делфи, скорее всего все так и есть. Хотя возможна оптимизация.

3. Если длина массива > 10 то быстрее (и удобнее) написать его значения в константе, чем присваивать каждый элемент отдельно. (текста надо написать меньше)


Можно сказать что все это несущественно, и при написании реальных программ разницы мало, но принципы верные

По поводу кода, выше я приводил пример что нужно сначала описать тип массива, объявить типизированную константу и массив этого типа.
http://programmersforum.ru/showpost....55&postcount=8
Armorer вне форума Ответить с цитированием
Старый 12.12.2009, 13:40   #15
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
Но с с остальным я не согласен.
читайте внимательнее
Цитата:
именно для этой задачи
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать рекурсией? Irdis Фриланс 4 11.02.2010 02:01
Как задать треугольник? Shevali Помощь студентам 4 07.04.2009 01:01
задать массив как константу...нужен совет dead-vip Паскаль, Turbo Pascal, PascalABC.NET 5 21.12.2008 16:07
Как задать множество 1234 Паскаль, Turbo Pascal, PascalABC.NET 7 25.05.2008 16:15
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25