На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Друзья, соблюдайте, пожалуйста, правила форума и данного раздела:
Данный раздел не предназначен для вопросов и обсуждений, он содержит FAQ-заготовки для разных языков программирования. Любой желающий может разместить здесь свою статью. Вопросы же задавайте в тематических разделах!
• Если ваша статья может быть перенесена в FAQ соответствующего раздела, при условии, что она будет оформлена в соответствии с Требованиями к оформлению статей.
• Чтобы остальным было проще понять, указывайте в описании темы (подзаголовке) название языка в [квадратных скобках]!
Модераторы: Модераторы
  
> Неотёсанные топики , [Pascal] Здесь шлифуем FAQ (ЧАВО)
    Помещено в Указатели (Pointers)
    Сообщение отредактировано: Jin X -
      Цитата
      romtek, 26.05.04, 00:07
      if P<>Nil then


      Необходимо закоммненить. Типа

      ExpandedWrap disabled
        if P<>Nil then { Если распределение памяти прошло успешно }


      Ну а записать туда Sz Рандомных символов? :rolleyes:
        Цитата
        Romtek, 25.05.04, 19:07
        Какой пример привести для работы с нетипизированными ук-лями?

        Просто пример выделения памяти под "произвольные данные". Когда их тип точно не определён, но известен размер. Например графическое изображение. Ну или текст. А лучше данные из файла. Они по любому могут быть неопределённые ;)

        Добавлено в :
        Да.. так будет лучше всего. сначала узнаём размер файла. Потом выделяем соответствующее количество байт, и грузим содержимое в дамп данных. Потом загадочный коментарный блок "обработка данных" и удаление блока из памяти и закрытие файла. %))) Для примера вполне сойдёт. Главное чтобы понятно было как работать. а... или даже лучше потом чёнить с данными сделать. Например закодировать каждый байт данных командой xor <введённое пользователем число> (заодно в примере придётся использовать команду mem.)
          Линк на тему Поиск данных
          Сообщение отредактировано: Romtek -
            М... а комментарии какие-то? ;)
              да комментариев особо не надо. Есть массив, указатель на него и границы передаются в процедуру. В процедуре выполняется цикл, от границ берется среднее, сверяется с ключом. Если ключ больше, значит слева от среднего и в самом среднем ключа быть не может (массив отсортирован по возрастанию, если по убыванию, нужно поменять знак сравнения), передвигаем левую границу за среднее (Lb:=M+1;) если меньше, аналогично поступаем с правой, если равно, то возвращаем индекс. Цикл завершается, если в середине не осталось ни одного элемента (until Lb>Ub;), тогда выходим с записанным в начале значением -1.
                Цитата Задача
                В строке содержится список неотрицательных десятичных чисел, содержащих целую и дробную части, разделенные точкой. Элементы списка разделены запятыми. Требуется удалить незначащие нули в целой и дробной частях, если они имеются. Если при этом полностью удаляется дробная часть, то удалению подлежит также разделяющая их точка.

                Учесть, что целая часть числа должна содержать по крайней мере одну цифру (например, для числа 000.0500 получим 0.05, а для числа 000.000 - значение 0). Например, для строки
                S = '35.0500,0054.03,000,045,0.7000,000606.0600,0.000,55'
                получим
                S = '35.05,54.03,0,45,0.7,606.06,0,55'.

                ExpandedWrap disabled
                  Program StringTask6;
                  Var
                     S,Sb : string;
                     i,k,k1,k2 : byte;
                     Cond : Boolean;
                  { --------------------------- }
                  Function Comma (k:byte) :byte;
                  Var
                     i : byte;
                  Begin
                    Comma:= 0;
                    For i:=k to length(S) do
                      If S[i]=',' then
                        Begin
                          Comma:=i;
                          Exit
                        End;
                  End { Comma };
                  { --------------------------- }
                  Begin
                    Readln(S);
                    Writeln('S=',S);
                    Cond:=true;
                    k2:=0;
                    While Cond do
                      Begin
                        k1:=k2+1;
                        k2:=Comma(k1 + 1) ;
                        If k2=0 then
                          Begin
                            k2:=length(S)+1; Cond:=false
                          End;
                        Sb:=Copy(S,k1,k2-k1);
                        k:=Pos('.',Sb);
                        If k=0 then   { число не имеет дробной части }
                          k:=length(Sb) +1;
                        i:=1; { Удаление незначащих }
                        While (i<k-1) and (Sb[i]='0') do { нулей в целой части }
                          Inc(i); { числа }
                        If i>1 then
                        Delete(Sb,1,i-1);
                        k:=Pos('.',Sb);
                        If k>0 then
                          Begin
                            i:=length(Sb);    { Удаление незначащих }
                            While (i>k) and (Sb[i]='0') do   { нулей в дробной части }
                              Dec (i);    { числа }
                            If i<length(Sb) then
                              Delete(Sb,i+1,length(Sb)-i);
                            If Sb[length(Sb)]='.' then
                  { Удаление разделяющей }
                              Delete(Sb,length(Sb),1);       { точки }
                          End;
                        If length(Sb)<k2-k1 then         { Замена числа в строке }
                          Begin   { S, если его длина }
                            Delete(S,k1,k2-k1);   { изменилась }
                            Insert(Sb,S,k1);
                            k2:=k1+length(Sb);    { Коррекция значения k2 }
                          End;
                      End;
                    Writeln('S=',S);
                  End.
                   
                  (*
                  Примечание. В программе StringTask6 учитывается, что первая цифра первого числа находится в первой позиции исходной строки S, а первая цифра следующих чисел - после запятой (по условию задачи в строке S нет пробелов).
                  *)
                  Ух ты %) я тоже решил написать эту задачку %)
                  ExpandedWrap disabled
                    const
                      example:string='35.0500,0054.03,000,045,0.7000,000606.0600,0.000,55';
                     
                    function normalizevalues(s:string):string;
                    var
                      p:byte;
                      temp:string;
                    begin
                      temp:='';
                      p:=1;
                      s:=' '+s+' '; {Добавим лишние проблеы, чтобы случайно не выйти за границы при проверке}
                      while p<=length(s) do {цикл, в котором обрабатывается строка}
                      begin
                        if s[p]=',' then {если текущий символ - ',' то убираем слева и справа лишние нули}
                        begin
                          while s[p+1]='0' do inc(p); {справа нули в исходной строке пропускаем}
                          while (temp[byte(temp[0])] in ['0','.']) and
                            not (temp[byte(temp[0])-1] in [',',' ']) do dec(temp[0]); {убираем в готовой строке нули слева}
                          temp:=temp+','; {добавляем запятую}
                          if not (s[p+1] in ['1'..'9']) then temp:=temp+'0'; {если нужно оставить один ноль - добавляем его}
                        end else if s[p]<>' ' then temp:=temp+s[p]; {Иначе просто добавляем символ}
                        inc(p);
                      end;
                      normalizevalues:=temp;
                    end;
                     
                    begin
                      writeln(example);
                      writeln(normalizevalues(example));
                    end.
                    IMHO твоя прога сложнее для понимания, особенно для новичков...
                      еще один алгоритмик:

                      Это конечно изврат, но работать будет:

                      Сначала число записать в real пременную, а потом преобразовать в строку... И все сразу нормализуется....
                      Сообщение отредактировано: e-moe -
                        M
                        e-moe,
                        Some1,
                        я прошу вас не превращать тему в разделе FAQ в подобие раздела Многошум!


                        Здесь помещаются окончательные варианты, а обсуждением следует заниматься в отдельной теме. Предупреждаю, такие посты будут удаляться!
                          Вот ещё один вариант, который как раз очень понятен для новичка, хотя и не оптимален как код.
                          Принцип такой, что мы ищем в строке сначала пары ',0' и найдя удаляем из строки нолик. Таким образом все нолики после запятых (тоесть в начале следующей цифры) будут удалены. Затем по такому же принципу мы ищем все '0,' и опять же удаляем нули, таким образом убирая все лишние нули в конце цифры. В результате у нас получатся уже улучшеные цифры. Но вот незадача - могут остаться точечки, если в дробной части были только нули. Поэтому мы ищем все последовательности типа '.,' и удаляем из них ненужные точки. После этого казалось бы всё. Ан нет. Ведь вот так обрезая цифры мы удалим вобще число вроде '000', от которого останутся только рожки да ножки и две запятые по бокам - ',,' Вот такие пары запятых мы и ищем, вставляе попутно между ними нулики. Остаётся ещё добавить нулики между ',.' потому что при обрезке начала цифры у нас удалятся все нули, а если цифра была '0.01', то получится '.01', а нам нужно чтобы один ноль сохранился. Поэтому мы ищем пары ',.' и вставляем между ними нулики.
                          Теперь вроде всё.
                          Ну и ещё я добавляю к началу строки и к концу по одной запятой, для того чтобы корректно обрабатывались первое и последнее число. В конце функции я от них избавляюсь незамысловатой конструкцией и командой copy :)
                          ExpandedWrap disabled
                            function normalizevalues(s:string):string;
                            begin
                              s:=','+s+',';
                              while pos(',0',s)<>0 do delete(s,pos(',0',s)+1,1);
                              while pos('0,',s)<>0 do delete(s,pos('0,',s),1);
                              while pos('.,',s)<>0 do delete(s,pos('.,',s),1);
                              while pos(',,',s)<>0 do insert('0',s,pos(',,',s)+1);
                              while pos(',.',s)<>0 do insert('0',s,pos(',.',s)+1);
                              normalizevalues:=copy(s,2,length(s)-2);
                            end;
                            конструкцию типа
                            ExpandedWrap disabled
                                while pos(',0',s)<>0 do delete(s,pos(',0',s)+1,1);
                            я заменил бы на
                            ExpandedWrap disabled
                                repeat
                                  m:=pos(',0',s);
                                  if m<>0 then delete(s,m+1,1);
                                until m=0;


                            Добавлено в :


                            e-moe, хочется видеть процедуры, готовые к использованию...
                            1-я процедура должна выделять числа, разделённых запятой
                            2-я - нормализовать сами числа,
                            т.к. в большинстве случаев числа не будут разделены запятыми.
                              я бы не советовал использовать const при выводе длинного числа, потому что оно забивает стек копией числа
                              пусть медленно, но работает...
                              +

                              Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                Vesper, как раз-таки наоборот: const передает ссылку на объект, а если без const - то будет забиваться стек.

                                Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                  Во избежание путаницы предлагаю переименовать все функции:
                                  ReadL -> Long_Read
                                  WriteL -> Long_Write
                                  AddC -> Long_Add,
                                  Ravno -> Long_Equal
                                  Menshe -> Long_Less
                                  Bolshe -> Long_Above

                                  Все эти функции должны быть описаны в статье.
                                  По минимуму - хотя бы упомянуты, с указанием их назначения.

                                  Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                  Сообщение отредактировано: vot -
                                    1) Почему в интерфейсной части не описано назначение процедур Min, Max, Zam, More ?
                                    2) Почему назначение процедур не продублировано в секции IMPLEMENTATION?
                                    3) Почему описание процедур такое непонятное, типа
                                    "{Вычисляет частное комплексных чисел}" ???
                                    В секции IMPLEMENTATION следует более подробно описывать назначение и процедуры, и используемых параметров, например:
                                    {Вычисляет частное от деления комплексных чисел}
                                    {x - делимое, y - делитель, z - частное (результат деления)}

                                    Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                      Азат, закончи полностью статью!
                                      Исправь все неточности и дополни комментариями.

                                      Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                        M
                                        Твой пример был ориентирован на Дельфи, поэтому не к месту.
                                        Приведи пример для Турбо Паскаля


                                        Это сообщение было перенесено сюда или объединено из темы "Абсолютные переменные"
                                        Сообщение отредактировано: Romtek -
                                          Желательно бы принять меры, чтобы исходник полностью входил по ширине в стандартный экран
                                          80 символов. Один из методов - описание назначения не справа, а ПОД объявлением процедуры/функции.

                                          Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики"
                                            Есть идея написать статейку про компоновку асм модуля с Паскалем и Си...
                                            В какой раздел кидать? в Си и Паскаль или асм?
                                            Сообщение отредактировано: Romtek -
                                              Если компоновка асма в Паскале, то у нас.

                                              P.S. А что, об этом можно написать целую статью? :huh:
                                                Цитата Romtek,7.12.04, 10:58 @
                                                P.S. А что, об этом можно написать целую статью? :huh:

                                                Ну да... Написать про то как параметры в стек кидать, в каком порядке, кто их удаляет... Какого типа функции в каких регистрах результат возвращают...Ну и примеры.... Чем не статья?
                                                  Ага. Понятно. Значит у нас напиши.
                                                  Постарайся оформить всеми средствами в форуме, чтобы выглядело красиво и было приятно читать.
                                                    Цитата e-moe,7.12.04, 11:14 @
                                                    про то как параметры в стек кидать, в каком порядке, кто их удаляет...

                                                    А штука то нужная! Очень нужная! Пиши!
                                                    Цитата Romtek,7.12.04, 11:32 @
                                                    Постарайся оформить всеми средствами в форуме, чтобы выглядело красиво и было приятно читать.

                                                    А вот это тоже очень правильно.
                                                      так
                                                      параметры в паскаль-процедурах кладутся в стек слева направо, сначала первый, потом второй итд. Очищает их из стека вызванная процедура командой RET Params, где Params - совокупное число байт, занятых параметрами в стеке.
                                                      Функции возвращают результат так: размером в 1 байт (byte, char, boolean) в регистре AL, размером в 2 байта (integer,word) в регистре АХ, longint в DX:AX (старшие байты в DX), pointer возвращает сегмент в DX, смещение в AX, real возвращает готовое число в DX:BX:AX, ф-и с результатом single, double, extended возвращают результат в сткек сопроцессора (походу очищая его, так что перед вызовом скажем atan2(x) нужно очистить стек, ну или использовать ассемблерные команды сопроцессора для вычисления), строковые через @result (я правда не знаю где он лежит).

                                                      ЗЫ Оформлять я не умею и примеров пока что нет.
                                                        Неотёсанные топики (Сообщ. #22) "Определение принадлежности точки к многоугольнику"
                                                        Кто может, проверьте почему при некоторых значениях выдаётся неверный результат.
                                                          Вот что успел сделать по линковке Асма с паскалем... Камнями не кидать ;)... это только начало.... Времени вообще нету.... сессия... =(

                                                          [Romtek:: Прикрепи файл ZIP/RAR!]
                                                          Сообщение отредактировано: Romtek -

                                                          Прикреплённый файлПрикреплённый файлmy_PAS.7z (3.26 Кбайт, скачиваний: 183)
                                                            Вот ворд документ "ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ И ИНТЕГРИРОВАНИЕ" из какой-то книги, мне понравилось. Прислал DoctorGenius.
                                                            Цитата
                                                            Численные методы
                                                            1. Классические методы нахождения изолированного корня
                                                            1.1. Метод хорд (правило пропорциональных частей)
                                                            1.2. Вычисление производных (численное дифференцирование)
                                                            Задание 1
                                                            1.3. Правило Ньютона (метод касательных)
                                                            1.4. Комбинированный метод касательных и хорд
                                                            Задание 2
                                                            2. Выбор метода. Оператор Case ... of ...
                                                            Задание 3
                                                            3. Приближенное вычисление интегралов
                                                            Формула прямоугольников
                                                            Формула трапеций
                                                            Задание 4
                                                            Параболическое интерполирование.
                                                            Формула Симпсона
                                                            Об оценке погрешности
                                                            Задание 5
                                                            Вычисление интегралов методом Монте-Карло
                                                            Задание 6
                                                            Вычисление двойных интегралов методом Монте-Карло
                                                            Задание 7
                                                            Библиотека часто встречающихся процедур и функций
                                                            Упражнения


                                                            Если бы кто смог перевести его в HTML страничку, вообще б цены ему не было!

                                                            Добавлено

                                                            T[]X!N, спасибо!
                                                            А ты не можешь немного подробнее описать каждый метод? Воспользуйся даже этим документом...
                                                            Прикреплённый файлПрикреплённый файлmetod.rar (108.6 Кбайт, скачиваний: 1531)
                                                              Цитата Romtek,9.01.05, 00:54 @
                                                              Если бы кто смог перевести его в HTML страничку

                                                              т.е. просто перевести в хтмл, без всяких наворотов?

                                                              Цитата Romtek,9.01.05, 00:54 @
                                                              А ты не можешь немного подробнее описать каждый метод

                                                              немного подробнее описАл (правда совсем немного...) как картинки с харда запостить?
                                                                Цитата T[
                                                                X!N,9.01.05, 08:59,569609]т.е. просто перевести в хтмл, без всяких наворотов?

                                                                да, без наворотов. Я пробовал перевести в Ворде - получился файл размером с полмегабайта + картинки =~ 1.2 М <_<


                                                                Цитата T[
                                                                X!N,9.01.05, 08:59,569609]как картинки с харда запостить?

                                                                форум никак не позволяет. Можно только ссылку на картинку в интернет-ресурсах. Прикрепи архив RAR/ZIP (Max compression).

                                                                Я просил описать подробнее, т.к. на статью это не тянет.

                                                                Добавлено
                                                                Если все равно больше 200к, то пришли мне на мыло.
                                                                  докУмент. только теория, без заданий.
                                                                  Сообщение отредактировано: T[]X!N -

                                                                  Прикреплённый файлПрикреплённый файлmethods.rar (72.89 Кбайт, скачиваний: 207)
                                                                    Ух ты! Спасибо большое.

                                                                    P.S.
                                                                    Скажи, ты переводил его какой-то программой, или вручную?
                                                                      вручную, Copy+Paste. а есть у кого-нидь прога соответствующая? а то не очень удобно-то
                                                                        Не народ, я не понял, продолжать работу над статьей или нет? Ато ей заинтересовалось всего человека 3... Может нет смысла ее писать...
                                                                        Хотя еще есть про что: напр, про вызов из модуля паскалевских процедур....


                                                                        И еще, есть идея написать статейку по Дебагу на уровне Асма (с помощью td.exe) относительно прог на ВР... Это комуто нужно? Есть ли смысл начинать работу...?
                                                                          Тема весьма специфическая, и вряд ли будет иметь спрос у читателей.
                                                                          Цитата e-moe @
                                                                          И еще, есть идея написать статейку по Дебагу на уровне Асма (с помощью td.exe) относительно прог на ВР... Это комуто нужно? Есть ли смысл начинать работу...?
                                                                            e-moe, Нет нет.. статья очень даже качественная. Я думаю, может быть её лучше направить в журнал исходников? Ещё поработать над материалом, больше в теоретическом плане.
                                                                            Опиши гденибудь в начале сам принцип стыковки объектника и программы на пасе. Что куда стыкуется, и каким образом.
                                                                            Я вот например уже забывать начал%)
                                                                              Some1, я имею в виду статью
                                                                              Цитата e-moe @
                                                                              по Дебагу на уровне Асма
                                                                                Цитата Some1 @
                                                                                Нет нет.. статья очень даже качественная

                                                                                Спасибо ;)

                                                                                Цитата Some1 @
                                                                                Я думаю, может быть её лучше направить в журнал исходников?

                                                                                Romtek уже отправил ;)

                                                                                Цитата Some1 @
                                                                                Опиши гденибудь в начале сам принцип......

                                                                                Ок, буду дорабатывать...

                                                                                Цитата Romtek @
                                                                                Тема весьма специфическая, и вряд ли будет иметь спрос у читателей.

                                                                                Понятно... Хотя я был бы не против написать об этом... Ну, если будет нечем занятся, напишу.... ;)
                                                                                M
                                                                                Сообщения были разделены в тему "Модуль CRT"
                                                                                M
                                                                                Сообщения были разделены в тему "Мышиный курсор"
                                                                                M
                                                                                Сообщения были разделены в тему "Связь Паскаля и Ассемблера"
                                                                                M
                                                                                Сообщения были разделены в тему "ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ"
                                                                                M
                                                                                Сообщения были разделены в тему "Бинарное дерево поиска"
                                                                                M
                                                                                Сообщения были разделены в тему "Aнализ и выделение информации из текста"
                                                                                M
                                                                                Сообщения были разделены в тему "Графика - Graphics"
                                                                                Сообщение отредактировано: Song_Bot -
                                                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                0 пользователей:


                                                                                Рейтинг@Mail.ru
                                                                                [ Script execution time: 0,0871 ]   [ 16 queries used ]   [ Generated: 26.04.24, 03:11 GMT ]