Страница 2 из 2

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 29.12.2009 14:18:36
Astralis
Но все-таки считаю, что проеобразование в юникод является более универсальное решение, нежели разбор выражения по действующему стандарту UTF-8 (до 128 это 1 байт, до 224 это два итд). Если ваша программа опирается лишь на знания, что UTF-8 - это плавающий формат, а UCS-2 - это фиксированный, то программа будет гораздо более универсальной, и будет легче адаптироваться к изменениям формата. Если предварительные и окончательные преобразования не носят критический характер, то лучше именно так и поступать.

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 29.12.2009 15:59:06
Climber
Putnick писал(а):Возьму на себя смелость утверждать, что, как правило, преподаватель требует решения не "как лучше", а "как положено", т.е. в рамках прочитанных этим преподавателем лекций.
...
В рамках же упомянутых ранее лекций, наш друг rraassttaa, скорее всего, понятия не имеет о TStringList

А я возьму на себя смелость утверждать, что из поста автора непонятно, что именно они проходили и знает ли он что-либо о StringList.
Кстати, вчера показал эту задачку жене, она написала решение на питоне. И использовала для этого структуру, аналогичную StringList и предназначенную в том числе и для таких задач. Тоесть не только в паскале есть аналогичные структуры для решения аналогичных задач. Что дает мне повод надеятся, что преподаватель учит не самым отсталым технологиям. :mrgreen:

P. S.
1) В моем решении отсутствует рассмотрение проблемы юникода - если задать строку русскими буквами, то получится ерунда полная (кроме неюникодных версий Delphi).
2) Можно ускорить мой способ, используя кастинг, - тогда вообще не придятся тратить время на преобразование типов. И метод будет работать так же быстро, как и с массивами. Если их и этому учат - тогда ваще супер. 8)

Добавлено спустя 8 минут 18 секунд:
Re: Помогите плиз до понедельника 29 декабря надо написать
P. P. S. Кстати, многие преподаватели очень положитльно относятся к тому, что студенты решают задачи способми, которые в курсе лекций отсутствовали.

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 29.12.2009 20:54:41
Putnick
Уважаемый, Climber.
Позволю себе заметить, что из поста автора даже суть задачи лишь угадывается :wink: .
С тем, что
многие преподаватели очень положитльно относятся к тому, что студенты решают задачи способми, которые в курсе лекций отсутствовали.
, я готов согласиться с условием, однако, что студент способен объяснить свой способ. Хотя всё-таки мне думается, что оригинальные решения лучше приберечь для курсовых и дипломов, а для всяких лабораторок есть учебный план. И если сказано "через for...to...do", то будьте любезны — "через for...to...do", даже если это "через жо...". А уж после этого — хоть 1000 и 1 нестандартный метод.

Впрочем, довольно злословия!

Не могли бы Вы, специально для меня развернуть
2) Можно ускорить мой способ, используя кастинг, - тогда вообще не придятся тратить время на преобразование типов. И метод будет работать так же быстро, как и с массивами.
или посоветовать, что почитать на эту тему. К своему стыду, должен признать что совершенно "не в теме" по данному вопросу (то ли учился "самым отсталым технологиям", то ли ТАК учился (последнее более вероятно :() ).

Заранее благодарен, с уважением, Алексей.

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 29.12.2009 23:41:09
Climber
Putnick писал(а): я готов согласиться с условием, однако, что студент способен объяснить свой способ.

Как говорится, "проблемы индейцев шерифа не волнуют". Хочет узнать, как работает - пусть спросит, отвечу.

Putnick писал(а):И если сказано "через for...to...do", то будьте любезны — "через for...to...do"
У меня в коде есть "for...to...do", так что не надо грязи :wink:

Putnick писал(а):Не могли бы Вы, специально для меня развернуть
2) Можно ускорить мой способ, используя кастинг, - тогда вообще не придятся тратить время на преобразование типов. И метод будет работать так же быстро, как и с массивами.
или посоветовать, что почитать на эту тему.
Ну я, к своему стыду, первые лет 5-6, пока программирование было хобби, тоже не очень упорствовал в изучении. И что такое кастинг тоже узнал совсем недавно. Почитать могу порекомендовать Марко Канту (или Кэнту) - лучшая книга по Delphi. Это независимо ни от чего. Кто его книгу не читал, обязательно найдет что-нибудь интересное.
Конкретно про кастинг. Это явное преобразование типов. Выглядит так:

Код: Выделить всё

var
i: byte;
c: char;
begin
c:='Z';
i:=Byte(c);
Этот код как бы говорит: обе переменные - одного размера. Давайте представим, что значение переменной "с" - это как бы целое число. Таким образом, в переменную i будет помещен код буквы Z, т. е. 90.
Правда, есть одно "но": сам я так делать не пробовал. Попробовал только что - получается какая-то ерунда. Интуиция подсказывает, что можно в StringList записать 4 нулевых байта после знака равенства, потом взять эти 4 байта, сделать вид, что это longint, прибавить 1, сделать вид, что это опять string... Но тут сказываются уже пробелы в моих знаниях... :mrgreen:
Но мне уже самому интересно стало, сейчас попробую что-нибудь избразить.
Ну и по скорости это конечно будет немного проигрывать решениям с массивами, т. к. при работе со StringList постоянно приходится искать разделитель в строке, который и так всегда на одном и том же месте....

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 30.12.2009 09:04:25
Putnick
Благодарю, Climber!
Осознал, "будем поискать" :)

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 30.12.2009 17:33:12
fwp
А нельзя что либо подобное:

Код: Выделить всё

var
   A : array[1..256] of integer;
...
  S := Edit1.Text;
  for i := 1 to Length(S) do begin
    Inc(A[ord(S[i])]);  // Считаем число входов
  end;
  S := '';
  for i := 1 to 256 do begin
    if (A[i] > 0) then begin
       S := S + chr(i) + '-' + IntToStr(A[i]) + ',';
    end;
  end;

Re: Помогите плиз до понедельника 29 декабря надо написа

Добавлено: 31.12.2009 11:03:19
v-t-l
fwp
Поддерживаю. Правда с кириллицей в юникоде не прокатит, но по приведенному условию и не надо:
rraassttaa писал(а):В одном текстовом поле написано:

weter weter ti mogu4

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 09.01.2010 14:13:59
Nord
помогите разобраться с программой.Нужно вычислить число по формуле "e=1+x+x^2/2!+x^3/3!+....+x^n/n!".
Если брать за X число 1,то прога готова,как сделать факториал разобрался. Но препод попросил сделать для любого X. Проблема,что не могу написать возведение в степень. Подскажите как именно для этой программы. В школе изучал turbo,там со степенями все легко.а как возвести в степень во free не могу понять.

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 09.01.2010 14:38:15
Padre_Mortius
Абсолютно точно также, как и в TP7.

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 09.01.2010 15:47:44
Putnick
Уважемый Nord,
Как уже сказал Падре, задача решается также как и в ТП7. Скажу больше, решение очень похоже на вычисление факториала (n!=1*2*3*...*n, a n^m=n*n*n*...*n). Другое дело, что я бы эти два пунктика объединил и вычислял бы факториал и степень параллельно:

Код: Выделить всё

program p5;
var
  fact, step:real;
  Result, X:real;
  MaxN, i:Integer;
begin
  fact:=1;
  step:=1;
  Result:=1;
  Write('X=');
  ReadLn(X);
  Write('Количество членов ряда ');
  ReadLn(MaxN);
  for i:=1 to MaxN do begin
    Fact:=Fact*i;
    Step:=Step*X;
    Result:=Result+Step/Fact
  end;
  WriteLn('Result=',Result)
end.

Ну а, вообще, возведение в степень положительного числа (a) можно делать так

Код: Выделить всё

a_v_stepeni_b:=exp(b*ln(a))


C уважением, Алексей.

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 09.01.2010 16:59:43
Nord
а что нужно писать в начале программы,чтобы exp работало???

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 09.01.2010 18:10:51
Padre_Mortius
ничего не нужно.

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 10.01.2010 07:45:43
Nord
мне почему то пишет "error 26:type mismatch".если строку с Exp заменяю например на обычное сложение,то все работает.

Re: Помогите плиз до понедельника 29 декабря надо написать

Добавлено: 10.01.2010 14:16:32
Padre_Mortius
Понятно. Ваш результат должен быть не целым числом, а вещественным, тогда будет все хорошо