Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.221.163] |
|
Сообщ.
#1
,
|
|
|
Помещено в Указатели (Pointers)
|
Сообщ.
#2
,
|
|
|
Цитата romtek, 26.05.04, 00:07 if P<>Nil then Необходимо закоммненить. Типа if P<>Nil then { Если распределение памяти прошло успешно } Ну а записать туда Sz Рандомных символов? |
Сообщ.
#3
,
|
|
|
Цитата Romtek, 25.05.04, 19:07 Какой пример привести для работы с нетипизированными ук-лями? Просто пример выделения памяти под "произвольные данные". Когда их тип точно не определён, но известен размер. Например графическое изображение. Ну или текст. А лучше данные из файла. Они по любому могут быть неопределённые Добавлено в : Да.. так будет лучше всего. сначала узнаём размер файла. Потом выделяем соответствующее количество байт, и грузим содержимое в дамп данных. Потом загадочный коментарный блок "обработка данных" и удаление блока из памяти и закрытие файла. %))) Для примера вполне сойдёт. Главное чтобы понятно было как работать. а... или даже лучше потом чёнить с данными сделать. Например закодировать каждый байт данных командой xor <введённое пользователем число> (заодно в примере придётся использовать команду mem.) |
Сообщ.
#4
,
|
|
|
Линк на тему Поиск данных
|
Сообщ.
#5
,
|
|
|
М... а комментарии какие-то?
|
Сообщ.
#6
,
|
|
|
да комментариев особо не надо. Есть массив, указатель на него и границы передаются в процедуру. В процедуре выполняется цикл, от границ берется среднее, сверяется с ключом. Если ключ больше, значит слева от среднего и в самом среднем ключа быть не может (массив отсортирован по возрастанию, если по убыванию, нужно поменять знак сравнения), передвигаем левую границу за среднее (Lb:=M+1;) если меньше, аналогично поступаем с правой, если равно, то возвращаем индекс. Цикл завершается, если в середине не осталось ни одного элемента (until Lb>Ub;), тогда выходим с записанным в начале значением -1.
|
Сообщ.
#7
,
|
|
|
Цитата Задача В строке содержится список неотрицательных десятичных чисел, содержащих целую и дробную части, разделенные точкой. Элементы списка разделены запятыми. Требуется удалить незначащие нули в целой и дробной частях, если они имеются. Если при этом полностью удаляется дробная часть, то удалению подлежит также разделяющая их точка. Учесть, что целая часть числа должна содержать по крайней мере одну цифру (например, для числа 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'. 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 нет пробелов). *) |
Сообщ.
#8
,
|
|
|
Ух ты %) я тоже решил написать эту задачку %)
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. |
Сообщ.
#9
,
|
|
|
IMHO твоя прога сложнее для понимания, особенно для новичков...
|
Сообщ.
#10
,
|
|
|
еще один алгоритмик:
Это конечно изврат, но работать будет: Сначала число записать в real пременную, а потом преобразовать в строку... И все сразу нормализуется.... |
Сообщ.
#11
,
|
|
|
M e-moe, Some1, я прошу вас не превращать тему в разделе FAQ в подобие раздела Многошум! Здесь помещаются окончательные варианты, а обсуждением следует заниматься в отдельной теме. Предупреждаю, такие посты будут удаляться! |
Сообщ.
#12
,
|
|
|
Вот ещё один вариант, который как раз очень понятен для новичка, хотя и не оптимален как код.
Принцип такой, что мы ищем в строке сначала пары ',0' и найдя удаляем из строки нолик. Таким образом все нолики после запятых (тоесть в начале следующей цифры) будут удалены. Затем по такому же принципу мы ищем все '0,' и опять же удаляем нули, таким образом убирая все лишние нули в конце цифры. В результате у нас получатся уже улучшеные цифры. Но вот незадача - могут остаться точечки, если в дробной части были только нули. Поэтому мы ищем все последовательности типа '.,' и удаляем из них ненужные точки. После этого казалось бы всё. Ан нет. Ведь вот так обрезая цифры мы удалим вобще число вроде '000', от которого останутся только рожки да ножки и две запятые по бокам - ',,' Вот такие пары запятых мы и ищем, вставляе попутно между ними нулики. Остаётся ещё добавить нулики между ',.' потому что при обрезке начала цифры у нас удалятся все нули, а если цифра была '0.01', то получится '.01', а нам нужно чтобы один ноль сохранился. Поэтому мы ищем пары ',.' и вставляем между ними нулики. Теперь вроде всё. Ну и ещё я добавляю к началу строки и к концу по одной запятой, для того чтобы корректно обрабатывались первое и последнее число. В конце функции я от них избавляюсь незамысловатой конструкцией и командой copy 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; |
Сообщ.
#13
,
|
|
|
конструкцию типа
while pos(',0',s)<>0 do delete(s,pos(',0',s)+1,1); repeat m:=pos(',0',s); if m<>0 then delete(s,m+1,1); until m=0; Добавлено в : e-moe, хочется видеть процедуры, готовые к использованию... 1-я процедура должна выделять числа, разделённых запятой 2-я - нормализовать сами числа, т.к. в большинстве случаев числа не будут разделены запятыми. |
Сообщ.
#14
,
|
|
|
я бы не советовал использовать const при выводе длинного числа, потому что оно забивает стек копией числа
пусть медленно, но работает... + Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#15
,
|
|
|
Vesper, как раз-таки наоборот: const передает ссылку на объект, а если без const - то будет забиваться стек.
Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#16
,
|
|
|
Во избежание путаницы предлагаю переименовать все функции:
ReadL -> Long_Read WriteL -> Long_Write AddC -> Long_Add, Ravno -> Long_Equal Menshe -> Long_Less Bolshe -> Long_Above Все эти функции должны быть описаны в статье. По минимуму - хотя бы упомянуты, с указанием их назначения. Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#17
,
|
|
|
1) Почему в интерфейсной части не описано назначение процедур Min, Max, Zam, More ?
2) Почему назначение процедур не продублировано в секции IMPLEMENTATION? 3) Почему описание процедур такое непонятное, типа "{Вычисляет частное комплексных чисел}" ??? В секции IMPLEMENTATION следует более подробно описывать назначение и процедуры, и используемых параметров, например: {Вычисляет частное от деления комплексных чисел} {x - делимое, y - делитель, z - частное (результат деления)} Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#18
,
|
|
|
Азат, закончи полностью статью!
Исправь все неточности и дополни комментариями. Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#19
,
|
|
|
M Твой пример был ориентирован на Дельфи, поэтому не к месту. Приведи пример для Турбо Паскаля Это сообщение было перенесено сюда или объединено из темы "Абсолютные переменные" |
Сообщ.
#20
,
|
|
|
Желательно бы принять меры, чтобы исходник полностью входил по ширине в стандартный экран
80 символов. Один из методов - описание назначения не справа, а ПОД объявлением процедуры/функции. Это сообщение было перенесено сюда или объединено из темы "Длинная арифметика - решение математики" |
Сообщ.
#21
,
|
|
|
Есть идея написать статейку про компоновку асм модуля с Паскалем и Си...
В какой раздел кидать? в Си и Паскаль или асм? |
Сообщ.
#22
,
|
|
|
Если компоновка асма в Паскале, то у нас.
P.S. А что, об этом можно написать целую статью? |
Сообщ.
#23
,
|
|
|
Цитата Romtek,7.12.04, 10:58 @ P.S. А что, об этом можно написать целую статью? Ну да... Написать про то как параметры в стек кидать, в каком порядке, кто их удаляет... Какого типа функции в каких регистрах результат возвращают...Ну и примеры.... Чем не статья? |
Сообщ.
#24
,
|
|
|
Ага. Понятно. Значит у нас напиши.
Постарайся оформить всеми средствами в форуме, чтобы выглядело красиво и было приятно читать. |
Сообщ.
#25
,
|
|
|
Цитата e-moe,7.12.04, 11:14 @ про то как параметры в стек кидать, в каком порядке, кто их удаляет... А штука то нужная! Очень нужная! Пиши! Цитата Romtek,7.12.04, 11:32 @ Постарайся оформить всеми средствами в форуме, чтобы выглядело красиво и было приятно читать. А вот это тоже очень правильно. |
Сообщ.
#26
,
|
|
|
так
параметры в паскаль-процедурах кладутся в стек слева направо, сначала первый, потом второй итд. Очищает их из стека вызванная процедура командой 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 (я правда не знаю где он лежит). ЗЫ Оформлять я не умею и примеров пока что нет. |
Сообщ.
#27
,
|
|
|
Неотёсанные топики (Сообщ. #22) "Определение принадлежности точки к многоугольнику"
Кто может, проверьте почему при некоторых значениях выдаётся неверный результат. |
Сообщ.
#28
,
|
|
|
Вот что успел сделать по линковке Асма с паскалем... Камнями не кидать ... это только начало.... Времени вообще нету.... сессия... =(
[Romtek:: Прикрепи файл ZIP/RAR!] Прикреплённый файлmy_PAS.7z (3.26 Кбайт, скачиваний: 183) |
Сообщ.
#29
,
|
|
|
Вот ворд документ "ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ И ИНТЕГРИРОВАНИЕ" из какой-то книги, мне понравилось. Прислал 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) |
Сообщ.
#30
,
|
|
|
Цитата Romtek,9.01.05, 00:54 @ Если бы кто смог перевести его в HTML страничку т.е. просто перевести в хтмл, без всяких наворотов? Цитата Romtek,9.01.05, 00:54 @ А ты не можешь немного подробнее описать каждый метод немного подробнее описАл (правда совсем немного...) как картинки с харда запостить? |
Сообщ.
#31
,
|
|
|
Цитата 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к, то пришли мне на мыло. |
Сообщ.
#32
,
|
|
|
докУмент. только теория, без заданий.
Прикреплённый файлmethods.rar (72.89 Кбайт, скачиваний: 207) |
Сообщ.
#33
,
|
|
|
Ух ты! Спасибо большое.
P.S. Скажи, ты переводил его какой-то программой, или вручную? |
Сообщ.
#34
,
|
|
|
вручную, Copy+Paste. а есть у кого-нидь прога соответствующая? а то не очень удобно-то
|
Сообщ.
#35
,
|
|
|
Не народ, я не понял, продолжать работу над статьей или нет? Ато ей заинтересовалось всего человека 3... Может нет смысла ее писать...
Хотя еще есть про что: напр, про вызов из модуля паскалевских процедур.... И еще, есть идея написать статейку по Дебагу на уровне Асма (с помощью td.exe) относительно прог на ВР... Это комуто нужно? Есть ли смысл начинать работу...? |
Сообщ.
#36
,
|
|
|
Тема весьма специфическая, и вряд ли будет иметь спрос у читателей.
Цитата e-moe @ И еще, есть идея написать статейку по Дебагу на уровне Асма (с помощью td.exe) относительно прог на ВР... Это комуто нужно? Есть ли смысл начинать работу...? |
Сообщ.
#37
,
|
|
|
e-moe, Нет нет.. статья очень даже качественная. Я думаю, может быть её лучше направить в журнал исходников? Ещё поработать над материалом, больше в теоретическом плане.
Опиши гденибудь в начале сам принцип стыковки объектника и программы на пасе. Что куда стыкуется, и каким образом. Я вот например уже забывать начал%) |
Сообщ.
#38
,
|
|
|
Some1, я имею в виду статью
Цитата e-moe @ по Дебагу на уровне Асма |
Сообщ.
#39
,
|
|
|
Цитата Some1 @ Нет нет.. статья очень даже качественная Спасибо Цитата Some1 @ Я думаю, может быть её лучше направить в журнал исходников? Romtek уже отправил Цитата Some1 @ Опиши гденибудь в начале сам принцип...... Ок, буду дорабатывать... Цитата Romtek @ Тема весьма специфическая, и вряд ли будет иметь спрос у читателей. Понятно... Хотя я был бы не против написать об этом... Ну, если будет нечем занятся, напишу.... M Сообщения были разделены в тему "Модуль CRT" M Сообщения были разделены в тему "Мышиный курсор" M Сообщения были разделены в тему "Связь Паскаля и Ассемблера" M Сообщения были разделены в тему "ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ" M Сообщения были разделены в тему "Бинарное дерево поиска" M Сообщения были разделены в тему "Aнализ и выделение информации из текста" M Сообщения были разделены в тему "Определение принадлежности точки к многоугольнику" M Сообщения были разделены в тему "Графика - Graphics" |