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

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


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


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

Выпуск № 223
от 25.12.2003, 13:20

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


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

Strory
Статус: Начальный
Общий рейтинг: 155.55
[Подробней >>]
fC
Статус: Профессиональный
Общий рейтинг: 149.15
URL: Тезка :)
[Подробней >>]
Vitally
Статус: Доверительный
Общий рейтинг: 160.6
[Подробней >>]
 
sir henry
Статус: Профессиональный
Общий рейтинг: 161.15
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 150.16
URL: Программирование на Паскале
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.29
[Подробней >>]
 
Drahus
Статус: Опытный
Общий рейтинг: 171.02
[Подробней >>]


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

Вопрос № 380. Эксперты, помогите, пожалуйста. Всё время что-нибудь не получается, все варианты я показывать не буд... (ответов: 5)
Вопрос № 381. Доброго времени суток! 1) Именно это я и писал. 2) Об этом не шло и речи. В скобках указано-оба. Я и... (ответов: 1)
Вопрос № 382. Уважаемые эксперты, не могу решить такую проблему: в программе создается массив из целочисленных эле... (ответов: 6)
Вопрос № 383. Здравствуйте, Boriss! Если Вам интересно - объясню: Я создал кнопку и мне совершенно не известно и н... (ответов: 1)
Вопрос № 384. Уважаемые эксперты, в предыдущем сообщении я пожаловался на некорректный вывод символов в файл. Благ... (ответов: 4)

Вопросов: 5, ответов: 17


 Вопрос № 380

Эксперты, помогите, пожалуйста.
Всё время что-нибудь не получается, все варианты я показывать не буду, так что помогите, пожалуйста, с программой. Вот условие:
Текст закодирован с помощью сетки размером n*n, где цифрой 0 обозначено отверстие. Для того чтобы декодировать (расшифровать) сообщение, нужно наложить сетку на текст так, чтобы в отверстия можно было видеть символы закодированного текста. Постепенно сетка поворачивается по часовой стрелке на 90 градусов так далее до полного оборота сетки на 360 градусов.
Исходные данные:
Текст и сетка в виде квадратных таблиц.
Выходные данные:
Результат выводится одной строкой на экран.
Пример:
П Б К Г 1 1 0 1
М Р Т В 1 0 1 1
Д М Р О 1 1 1 1
И А А З 0 1 1 1
Результат: криптограмма



Вопрос отправлен: 21.12.2003, 20:06
Отправитель: Дима (marshal90@mail.ru)

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

Отвечает Strory

Добрый день, Дима!
В приложении текст решения Вашей задачи. Только есть одно НО. На мой взгляд Вы дали не совсем верный тест и она выдаёт КРИПТОГРАММЗ. Если тест правильный, то напишите, буду смотреть где я ошибся.
input.txt должен иметь следующий формат:
первая строка: целое число N, размер сетки
далее N строк из N символов без пробелов
далее N строк из N чисел через пробел
Пример приведён в приложении.
Удачи :)

Приложение:

Ответ отправлен: 22.12.2003, 20:22
Отправитель: Strory


Отвечает fC

Приветствую Вас, Дима!
Покажи хоть один вариант, двоечник! :)

Ответ отправлен: 21.12.2003, 20:14
Отправитель: fC


Отвечает Vitally

Доброе время суток, Дима!
Мне бы твои проблемы! :) Программа в приложении.


Приложение:

Ответ отправлен: 22.12.2003, 12:02
Отправитель: Vitally


Отвечает sir henry

Доброе время суток, Дима!
Непонятен вопрос.
Вам нужно создать матрицу, которая рашифровывает слово, содержащееся в матрице с буквами или вы просто не знаете, как поворачивать матрицу на 90 градусов?

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


Отвечает Boriss

Добрый день, Дима!
Вот варант с простейшим вращением маски

Приложение:

Ответ отправлен: 24.12.2003, 17:06
Отправитель: Boriss


 Вопрос № 381

Доброго времени суток!
1) Именно это я и писал.
2) Об этом не шло и речи. В скобках указано-оба. Я имел в виду и метод родителя и метод потомка. Дело не в замене виртуального метода статическим(компилятор и не даст это сделать) а в том, что предок может иметь статический метод с таким же именем, как потомок (и,соответственно, наоборот), но с различными параметрами.
3.1)Спасибо! Хоть и с трудом, но понял! Правда,ерунда получается! :(
3.2)А я что с этого имею? Плохо это или хорошо?!
4)Нуууу... опечатка это! Все все поняли!
И последнее - кто знает - может именно ЭТОГО мне и не хватает для счастья!!!



Вопрос отправлен: 22.12.2003, 02:34
Отправитель: Vitally

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

Отвечает Strory

Доброе время суток, Vitally!
Чтобы определиться, нужно ли Вам использовать виртуальный или статический метод, можно использовать правило: если есть вероятность, что понадобится из метода предка вызов переопределённого метода потомка, то целесообразно делать метод виртуальным.
Преимущества виртуальных методов:
1) позднее связывание позволяет связать новые методы с существующими во время выполнения программы, требуя лишь небольшого увеличения ТВМ(Таблица Виртуальных Методов, VMT - Virtual Method Table).
2) можно не задумываться о том, включать или не включать метод в объект, который может быть использован или не использован в конкретной программе. Неиспользуемые методы не влияют на быстродействие программы, ни на размер EXE-файла: если они не используются, то они не включаются в него(!!!).
В общем случае многие авторы рекомендуют использовать виртуальные методы, НО:
1) они (используемые) требуют ОП для ТВМ;
2) каждый вызов виртуального метода проходит через ТВМ и требует для этого дополнительное время.
Использование статических методов имеет смысл, если надо получить оптимальную эффективность программы по скорости её выполнения и использованию ОП. Статические методы вызываются непосредственно. Поэтому вызов статического метода более быстрый, чем вызов виртуального. Если в объекте нет виртуальных методов, в сегменте данных отсутствует ТВМ и программа будет работать быстрее. Однако в этом случае теряется вариант расширения возможностей на этапе выполнения программы, при позднем связывании.
Что выбирать, решать Вам.
Надеюсь, ответ исчерпывающий.
И для полного счастья Вам нужно заняться динамическими методами. Это те, которые:
Function NameFunc: NameType; Virtual index(1..65535);
Их я не использовал ни разу в жизни (за ненадобностью), но знаком с людьми, которые этим занимались(поистине психи :) !!!).
Удачи :)

Ответ отправлен: 22.12.2003, 18:44
Отправитель: Strory


 Вопрос № 382

Уважаемые эксперты, не могу решить такую проблему:
в программе создается массив из целочисленных элементов, затем эти элементы нужно вывести в файл; после выполнения программы создается файл, но вместо цифр в нем непонятные знаки, а вместо пробелов квадратики. Текст программы ниже:
PROGRAM VOL1226;
USES CRT;
VAR
i,j,m,n,r :integer;
f1 :file of integer;
a,b,btrans,bquatro,bxbtrans:array[1..30,1..30] of integer;
BEGIN
CLRSCR;
assign(f1,'C:1226.txt');
for i:=1 to 3 do
for j:=1 to 3 do
begin
write('введи элемент матрицы: b[',i,'][',j,']=');
readln(b[i,j]);
end;
for i:=1 to 3 do
for j:=1 to 3 do
btrans[i,j]:=b[j,i];
{<---------------------------------->}
for i:=1 to 3 do
for j:=1 to 3 do
begin
bquatro[i,j]:=0;
bxbtrans[i,j]:=0;
end;
{<---------------------------------->}
n:=0;
for j:=1 to 3 do
begin
n:=n+1; m:=1;
for r:=1 to 3 do
begin
for i:=1 to 3 do
begin
bquatro[m,n]:=bquatro[m,n]+b[i,j]*b[m,i];
end;
m:=m+1;
end;
end;
{<---------------------------------->}
n:=0;
for j:=1 to 3 do
begin
n:=n+1; m:=1;
for r:=1 to 3 do
begin
for i:=1 to 3 do
begin
bxbtrans[m,n]:=bxbtrans[m,n]+b[j,i]*btrans[i,m];
end;
m:=m+1;
end;
end;
{<---------------------------------->}
for i:=1 to 3 do
for j:=1 to 3 do
a[i,j]:=bquatro[i,j]+bxbtrans[i,j]-b[i,j];
{<---------------------------------->}
for i:=1 to 3 do
begin
for j:=1 to 3 do
write(a[i,j]:4,' ');
writeln;
end;
{<---------------------------------->}
rewrite(f1);
for i:=1 to 3 do
for j:=1 to 3 do
write(f1,a[i,j]);
{<---------------------------------->}
writeln('Вывод элементов массива можно найти в файле по адресу "C:1226.txt"');
readln;
END.



Вопрос отправлен: 22.12.2003, 11:08
Отправитель: Дмитрий

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

Отвечает Strory

Здравствуйте, Дмитрий!
К счастью Ваша проблема элементарно решается.
Во-первых, чтобы Вы могли понять, что вывела Ваша программа в файл, он (файл) должен быть текстовым. Для этого замените объявление файла:
f1: file of integer;
на:
f1: TEXT;
Во-вторых, чтобы числа в файле были написаны отдельно друг от друга (как и на экране) измените строчку:
write(f1, a[i,j]);
на
write(f1, a[i,j],#32); {#32 - это ASCII-код пробела}
В третьих, обязательно закрывайте файл в конце программы, иначе он может не сохраниться и остаться пустым (так получилось на моём компе):
Close(f1);
Ниже прилагаю Вашу программу со всеми перечисленными изменениями.
Если возникнут вопросы по работе с файлами, пишите.
Удачи :)


Приложение:

Ответ отправлен: 22.12.2003, 18:44
Отправитель: Strory


Отвечает vitya

Доброе время суток, Дмитрий!
Ву создаете бинарный файл и пишете в него целые числа. Создайте файл типа TEXT и тогда все будет писаться нормально.

Ответ отправлен: 22.12.2003, 11:15
Отправитель: vitya


Отвечает Boriss

Добрый день, Дмитрий!
:)) Это не значки, это настоящие цифры. А значки - это символы с этим кодом. Если измените fl: file of Integer; на fl: Text, то увидите символы
То есть в файл Вы записали цифры, а когда смортите их ТЕКСТОВЫМ редакторам, то он "думает", что там записаны коды символов

Ответ отправлен: 22.12.2003, 11:35
Отправитель: Boriss


Отвечает sir henry

Доброе время суток, Дмитрий!
Если Вы хотите просматривать Ваш файл как текстовый, то и создавать его надо текстовый, а не типизированый:
f1 :file of integer; {Здесь будет видна всякая фигня}
f1 :text; {Здесь будет виден нормальный текст}


Ответ отправлен: 22.12.2003, 11:36
Отправитель: sir henry


Отвечает Vitally

Доброе время суток, Дмитрий!
Просто ты открываешь файл как текстовый, а записываешь как файл с integer елементами. Вобщем, нужно преобразовывать данные в текстовый формат. Иначе, записав число 255 - ты увидешь символ, номер которого 255 т.е - пробел. и т.д.
Стандартной процедуры для преобразования вроде нет. Можешь воспользоваться моей (она в приложении), можешь написать свою. :)
ЗЫ: И тип файла нужно будет сменить.

Приложение:

Ответ отправлен: 22.12.2003, 13:59
Отправитель: Vitally


Отвечает Drahus

Добрый день, Дмитрий!
То есть результат должен быть читабельным? Нужно конвертировать значения переменных (integer) (массива) в тип char. Для этого есть функция в Паскале, правда я забыл название. См. в справке. А вообще, если результат нужно только хранить, то лучше так и оставить, меньше места занимать будет. Это пригодится при работе с объёмными данными.


Ответ отправлен: 22.12.2003, 17:13
Отправитель: Drahus


 Вопрос № 383

Здравствуйте, Boriss!
Если Вам интересно - объясню:
Я создал кнопку и мне совершенно не известно и не интересно что она будет делать. Но, хотелось бы иметь метод.. Что-то типа Button1.Pressed. Так вот, в процедуре Pressed будет только один оператор. Что-то типа begin a; end; где "а" - это переменная процедурного типа, которой, при вызове конструктора например, присваивается адрес нужной нам процуры!
А вот Virtual - действительно почти бессмысленная штука.
ЗЫ: В любом случае спасибо! :)



Вопрос отправлен: 22.12.2003, 11:48
Отправитель: Vitally

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

Отвечает Boriss

Добрый день, Vitally!
Лично я, когда мне что-то непонятно, стараюсь разобраться, а не объявлять бессмысленным (впрочем, Вы поступайте, как хотите :)) ). На самом деле механизм виртуальных методов - очень мощная штука.
В частности, деструктор ДОЛЖЕН быть виртуальным.
Ну а решение Вашей задачи очень простое (см. в приложении).
И кстати, создание меню с помощью виртуальных методов выглядит лучше ;))

Приложение:

Ответ отправлен: 22.12.2003, 12:23
Отправитель: Boriss


 Вопрос № 384

Уважаемые эксперты, в предыдущем сообщении я пожаловался на некорректный вывод символов в файл. Благодарю за ответы, все вы посоветовали одно и то же, но проблема не решилась. Поменяв тип файла у меня теперь в йайл вообще ничего не выводится, размер файла - 0 Кб.
В чем проблема? В уважением, Дмитрий.



Вопрос отправлен: 22.12.2003, 12:05
Отправитель: Дмитрий

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

Отвечает Boriss

Здравствуйте, Дмитрий!
Не успевает выводиться. В текстовый файл вывод идет медленно, сначала информация (цифры) преобразуются к виду, который "понимает" комп (числа - в строки), а затем выводится. Ваша прога к моменту окончания преобразования успевает завершиться (END.) - и при этом закрываются все файлы!
Нужно перед END. написать FLUSH(fl); - эта команда заставляет проц ждать (не переходить к выполнению след. команды), пока не завершится вывод в файл

Ответ отправлен: 22.12.2003, 12:28
Отправитель: Boriss


Отвечает sir henry

Доброе время суток, Дмитрий!
Не забывайте закрывать файл после использования :).
Close(f1);
У меня, по тексту Вашей программы все записывается без проблем.
Изменения в следующем:
1. Изменен тип f1 с type of integer на text,
2. В конец файла программы добавлена строка закрытия файла:
Close(f1);
Если нужно, чтобы запись в файл переодически переводил строку на новую, то воспользуйтесь вместо Write - WriteLn.

Ответ отправлен: 22.12.2003, 14:04
Отправитель: sir henry


Отвечает Vitally

Приветствую Вас, Дмитрий!
Посылаю исправленный вариант программы...


Приложение:

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


Отвечает Drahus

Доброе время суток, Дмитрий!
У меня то же самое. Я сам не знаю. :) В этом случае вроде нужно вместо WRITE использовать BLOCKWRITE.


Ответ отправлен: 22.12.2003, 17:14
Отправитель: Drahus



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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

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




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


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

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

В избранное