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

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 207
от 04.12.2003, 18:30

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 354
Отправлено ответов: 1239
Активность: 350 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

sir henry
Статус: Профессиональный
Общий рейтинг: 161.92
[Подробней >>]
Boriss
Статус: Опытный
Общий рейтинг: 146.11
URL: Программирование на Паскале
Телефон: (8342) 324312
[Подробней >>]
Tancho
Статус: Опытный
Общий рейтинг: 151.82
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.09
[Подробней >>]
Vitally
Статус: Начальный
Общий рейтинг: 160
[Подробней >>]
hobit
Статус: Доверительный
Общий рейтинг: 116
[Подробней >>]
 
Duncan MacLeod
Статус: Начальный
Общий рейтинг: 106.53
[Подробней >>]
URiS
Статус: Профессиональный
Общий рейтинг: 116.97
URL: Бесплатный любительский софт, игры
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 351. Уважаемые эксперты, помогите срочно нужна программа хода канём !!!... (ответов: 2)
Вопрос № 352. Здравствуйте. У меня такой вопрос: как вычислить 2^n, где 0<= n >= 2*10^9 ?... (ответов: 4)
Вопрос № 353. Здраствуйте эксперты! У меня возник такой вопрос: В написанном в приложении коде выдается ошибка Err... (ответов: 8)

Вопросов: 3, ответов: 14


 Вопрос № 351

Уважаемые эксперты, помогите срочно нужна программа хода канём !!!



Вопрос отправлен: 01.12.2003, 08:05
Отправитель: Lucifer

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Добрый день, Lucifer!
"хода канём" - а это что такое? Японец?
:))

Ответ отправлен: 01.12.2003, 15:30
Отправитель: sir henry


Отвечает Boriss

Доброе время суток, Lucifer!
Не совсем понял, что надо именно. Если нужно заполнить , то по-простому: двумерный массив 8х8 и ...
var
x, y: Integer;
desk: array[1..8, 1..8] of integer; {номер хода}
count: Integer;
BEGIN
...
if (x + 2 <= 8) and (y + 1 <=8) then
begin
x:=x+2; y:=y+1; count:=count+1; desk[x,y]:=count
end;
...
END.

Ответ отправлен: 01.12.2003, 13:47
Отправитель: Boriss


 Вопрос № 352

Здравствуйте. У меня такой вопрос: как вычислить 2^n, где 0<= n >= 2*10^9 ?



Вопрос отправлен: 01.12.2003, 18:25
Отправитель: Serega (sng@str.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Tancho

Добрый день, Serega!
2^n = exp(n*ln(2)). Ну если НЕ ошибка, я не понимаю зачем
n => 0, когда мы искаем куда более сильное n>=2*10^9, разве
если это выполнено то n небудет больше или равно 0!Другое дело зачем нам такое болшое n и куда мы будем его девать.
В приложении дан пример когда n "разумное"!

Приложение:

Ответ отправлен: 02.12.2003, 17:42
Отправитель: Tancho


Отвечает vitya

Приветствую Вас, Serega!
по-моему в Паскале этот тип называется extended, но для его включения нужна какая-то директива. Итак,
extended ePower = exp(n * ln(2));, правда я все же не уверен, что в extended поместитя такое число, как 2 ^ (2*10^9).... вообще таких больших чисел не бывает :)

Ответ отправлен: 02.12.2003, 08:41
Отправитель: vitya


Отвечает sir henry

Приветствую Вас, Serega!
1. Можно 2 умножать на себя n раз,
2. Я пользуюсь FreePascal и там, в модуле Math, есть функции Power(base, exponent: float) и IntPower(base: float; exponent: longint), соответственно возведение в ЛЮБУЮ степень и возведение в ЦЕЛОЧИСЛЕННУЮ степень,
3. Можно воспользоваться формулой:
Result:=Exp(exponent * Ln(base));

Ответ отправлен: 02.12.2003, 08:51
Отправитель: sir henry


Отвечает Vitally

Здравствуй, Serega!
Если это не опечатка, и n действительно >=2*10^9 то...
Вобщем, моя программа позволит тебе вычеслить степень 2 вплоть до 2 147 483 647. Если нужно больше, придется зацикливать все еще раз, либо вставлять переменную, которая будет уменьшать значения для j непосредственно в цикле. И, скорее всего придется подключать еще массив/вы для хранения значений. При значении степени = 30000 экран был заполнен почти полностью. Т.е нужно будет делать паузу вывода если ты хочешь записать результат. :-)
Это, конечно, не идеальный вариант. Можно сделать ее более удобной и более быстрой...
Удачи!

Приложение:

Ответ отправлен: 02.12.2003, 14:29
Отправитель: Vitally


 Вопрос № 353

Здраствуйте эксперты!
У меня возник такой вопрос:
В написанном в приложении коде выдается ошибка
Error 133: Cannot evaluate this expression.
Что делать?


Приложение:


Вопрос отправлен: 01.12.2003, 18:25
Отправитель: matrixand

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Приветствую Вас, matrixand!
Паскаль это СТРОГО типизированный язык. В нем нет места неопределенностям такого типа, как определили Вы. То есть к моменту вызова процедуры размер массива в памяти должен быть точно известен.
Динамические массивы стали поддерживаться только в Delphi.
Некотроый выход в использовании открытых параметов. См пример: работает с ОДНОМЕРНЫМИ массивами "любого" размера:

Приложение:

Ответ отправлен: 01.12.2003, 19:24
Отправитель: Boriss


Отвечает Tancho

Доброе время суток, matrixand!
В Pascal'е директно такая вещ невозможна!Ты пробуеш описать
массив с переменная(неопределеная) верхная граница, а для это надо пофукисничить. Есть нескольках вариантов, все это
уже было разыскивано в эту рассылку - смотри выпусках
188 и 193 этой рассылки!Там было раззыскивано о создании
динамических массивов, разные вариантов, их предимствах и
недостатках.Я не могу добавить ничего больше к этом.


Ответ отправлен: 02.12.2003, 17:11
Отправитель: Tancho


Отвечает Vitally

Доброе время суток, matrixand!
Дело в том, что Паскаль не поддерживает работу с массивами переменной длинны. т.е. выражение ARRAY[1..X] где Х неопределено - недопустимо. Есть два варианта решения данной проблемы:
1)Указать максимально возможное значение для Х, но в процедуре использовать массив не полностью, а до определенного значения.
2)"Обмануть машину" так:
type
XArray=array[1..1]of integer;
XArrayPTR=^XArray;
Var mas:XArrayPTR;
Procedure abs(x:integer);
Begin
GetMem(mas,x*SizeOf(Integer));{Выделяем память}
for i:=1 to x do
mas^[i]:=i;
...
...
FreeMem(x*SizeOf(Integer));{Освобождаем память}
end;
P.S. Нужно отключить проверку индексов массивов (Range Checking)- Options>Compiler или {$R-}. Т.к. мы создали массив длинной в один элемент но, тянем руки гораздо дальше.

Ответ отправлен: 01.12.2003, 20:52
Отправитель: Vitally


Отвечает hobit

Доброе время суток, matrixand!
Дело в том, что в паскале нельзя динамически менять границы массива. Ведь ты можешь описать таким образом и 64000-элементный массив из integer'ов (по 2 байта). Так тебе никакого стека не хватит. Все структуры данных должны в сумме помещаться в 64 кило.


Ответ отправлен: 01.12.2003, 20:49
Отправитель: hobit


Отвечает Duncan MacLeod

Доброе время суток, matrixand!
Не, так дело у тебя не пойдет! Размерность массива должна быть определена до компиляции программы. А если тебе необходимо сделать именно так, то прочитай про динамическое выделение памяти!

Ответ отправлен: 01.12.2003, 23:49
Отправитель: Duncan MacLeod


Отвечает vitya

Доброе время суток, matrixand!
в объявлении типа не может быть использована переменная. Поэтому и не компилируется код. Тут : type t=array[1..x]...

Ответ отправлен: 02.12.2003, 08:39
Отправитель: vitya


Отвечает sir henry

Добрый день, matrixand!
"type t=array[1..x] of integer;" - ошибка наверняка здесь. Чтобы выделить память от 1 до х ячеек, х должно быть заранее известно.

Ответ отправлен: 02.12.2003, 08:54
Отправитель: sir henry


Отвечает URiS

Добрый день, matrixand!
Это тебе не Си++....
Используй константу вместо X.

>>> comp.soft.prog.urisprog - Рассылка про Delphi! Все статьи -> ВАМ в почтовый ящик еженедельно.


Ответ отправлен: 02.12.2003, 15:57
Отправитель: URiS



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (22)
Perl (3)
Builder / Delphi (16)
Pascal (18)
Basic / VBA (4)
Java / JavaScript (9)
PHP (13)
Криптография (4)
WinAPI (9)
Пользователю
Windows 95/98/Me (41)
Windows NT/2000/XP (55)
"Железо" (29)
Поиск информации (17)
Администратору
Windows NT/2000/XP (30)
Linux / Unix (13)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (9)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное