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

Форум для изучающих FPC и их учителей.

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

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

Сообщение Astralis » 29.12.2009 15:18:36

Но все-таки считаю, что проеобразование в юникод является более универсальное решение, нежели разбор выражения по действующему стандарту UTF-8 (до 128 это 1 байт, до 224 это два итд). Если ваша программа опирается лишь на знания, что UTF-8 - это плавающий формат, а UCS-2 - это фиксированный, то программа будет гораздо более универсальной, и будет легче адаптироваться к изменениям формата. Если предварительные и окончательные преобразования не носят критический характер, то лучше именно так и поступать.
Аватара пользователя
Astralis
новенький
 
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet

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

Сообщение Climber » 29.12.2009 16:50:48

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

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

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

Добавлено спустя 8 минут 18 секунд:
Re: Помогите плиз до понедельника 29 декабря надо написать
P. P. S. Кстати, многие преподаватели очень положитльно относятся к тому, что студенты решают задачи способми, которые в курсе лекций отсутствовали.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

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

Сообщение Putnick » 29.12.2009 21:54:41

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

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

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

Заранее благодарен, с уважением, Алексей.
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

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

Сообщение Climber » 30.12.2009 00:21:25

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 постоянно приходится искать разделитель в строке, который и так всегда на одном и том же месте....
Последний раз редактировалось Climber 30.12.2009 10:48:21, всего редактировалось 1 раз.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

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

Сообщение Putnick » 30.12.2009 10:04:25

Благодарю, Climber!
Осознал, "будем поискать" :)
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

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

Сообщение fwp » 30.12.2009 18:33:12

А нельзя что либо подобное:
Код: Выделить всё
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;
fwp
новенький
 
Сообщения: 29
Зарегистрирован: 25.03.2008 12:00:06

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

Сообщение v-t-l » 31.12.2009 12:03:19

fwp
Поддерживаю. Правда с кириллицей в юникоде не прокатит, но по приведенному условию и не надо:
rraassttaa писал(а):В одном текстовом поле написано:

weter weter ti mogu4
v-t-l
энтузиаст
 
Сообщения: 736
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

Сообщение Nord » 09.01.2010 15:13:59

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

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

Сообщение Padre_Mortius » 09.01.2010 15:38:15

Абсолютно точно также, как и в TP7.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение Putnick » 09.01.2010 16:47:44

Уважемый 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 уважением, Алексей.
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

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

Сообщение Nord » 09.01.2010 17:59:43

а что нужно писать в начале программы,чтобы exp работало???
Nord
незнакомец
 
Сообщения: 3
Зарегистрирован: 09.01.2010 15:04:47

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

Сообщение Padre_Mortius » 09.01.2010 19:10:51

ничего не нужно.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение Nord » 10.01.2010 08:45:43

мне почему то пишет "error 26:type mismatch".если строку с Exp заменяю например на обычное сложение,то все работает.
Nord
незнакомец
 
Сообщения: 3
Зарегистрирован: 09.01.2010 15:04:47

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

Сообщение Padre_Mortius » 10.01.2010 15:16:32

Понятно. Ваш результат должен быть не целым числом, а вещественным, тогда будет все хорошо
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Пред.

Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru