Opa
Новичок
|
Помогите реализовать в Delphi обучение нейронов детектированию границы белое и черное!Пожалуйста!!!!
|
Всего сообщений: 1 | Присоединился: декабрь 2007 | Отправлено: 17 дек. 2007 19:28 | IP
|
|
KMA
Долгожитель
|
Так чтобы по пятьсот раз не дублировать сообщения, предлагаю писать все только сюда. Итак это главный форум по задачам Дельфи.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 17 дек. 2007 20:39 | IP
|
|
Kollisto
Новичок
|
Здравствуйте!!! Не могли бы Вы помочь мне помочь реализовать эту процедуру вставки элемента в массив на Delphi? Procedure ElInsert(var X:TArray; var n:Integer; Y:Real; k:Integer); Var i:Integer; Begin For i:=n downto k Do X[i+1]:=X[ i ]; X[k]:=Y; n:=n+1; End; (Сообщение отредактировал KMA 21 янв. 2008 21:35)
|
Всего сообщений: 6 | Присоединился: январь 2008 | Отправлено: 21 янв. 2008 17:13 | IP
|
|
KMA
Долгожитель
|
У тебя все верно написано! Что тебе именно не понятно?
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 21 янв. 2008 21:36 | IP
|
|
Kollisto
Новичок
|
Непонятно как все это написать в Delphi, я только изучаю этот язык.
|
Всего сообщений: 6 | Присоединился: январь 2008 | Отправлено: 22 янв. 2008 21:06 | IP
|
|
KMA
Долгожитель
|
Начнем пожалуй с разъяснения, что такое Delphi. Это IDE (Integrated Development Envirioment может ошибся), т. е. интегрированния среда разработки, в основе которой лежит язык Object Pascal. Еще есть Kylix (это для систем *Unix), а так же Lazarus (она кроссплатформенная). Т. е. если ты знаешь язык Pascal, то проблем с изучением у тебя не должно быть. Все дело только в изучении компонентов. Компонент представляет собой уже написанный дядюшкой Борландом объект, который обладает определенными свойсвами и методами. Что именно тебе не понятно? Не понятно как вводить массив? Или может быть как его выводить? Конкретизируй, пожалуйста, и тогда я тебе смогу помочь, а если это возможно, то озвучь полную задачу, и тогда я тебе ее помогу решить.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 23 янв. 2008 15:23 | IP
|
|
Kollisto
Новичок
|
Спасибо Вам за пояснение!:-) Да, я не могу не ввести массив, не вывести:-( Я вот просто решаю самостоятельно задачки, но одной трудно во всем разобраться, если сможете помочь, буду очень признательна! И спасибо, что вообще ответили!:-) Задача:"Существует массив, выражающий последовательность элементов X[1..n]. Необходимо в последовательность вставить число y в позицию k. При этом элементы с номерами от k до n должны быть перемещены на один индекс ближе к концу последовательности".
|
Всего сообщений: 6 | Присоединился: январь 2008 | Отправлено: 23 янв. 2008 18:08 | IP
|
|
KMA
Долгожитель
|
Kollisto, сейчас я тебе объясню как нужно писать программы на Delphi. Первое что ты видишь перед собой это форма (TForm) - твоя рабочая область, куда ты размещаешь все остальные интерактивные элементы. Итак, у тебя обычный массив... Поэтому средвство для его ввода может служить компонент Edit (TEdit) или StringGrid. Второй компонент вообще больш предназначен для работы с матрицами (массива 2 порядка), поэтому его мы пока опустим, если интересно будет узнать, то на нем я остановлюсь подробнее. Итак, помещаем на форму компонент Edit. Давай сразу измененем его имя на arrayEdit (свойство Name, первоначально имя будет Edit1). Зачем мы изменили имя? Только для удобства, вообще элементам своей программы следует давать понятные имена, чтобы не только ты знала как она работает, но и другим давала возможность легко разобраться со своей программой. Над Editом помести компоента метак (Label, TLabel), и измени его свойство Caption (заголовок) на "Введите массив из 6 чисел". Таким образом пользователь будет знать, что ему нужно вводить в поле arrayEdit. Да, еще не забудь очистить у элемента arrayEdit свойство Text, дабы не было никаких лишних записей и оно было бы пустым. Итак ввод данных ты организовала. Выводить конечный массив мы будем пока через компонент Label, хотя сойдет на самом деле любой. Итак, помести его под arrayEdit, дай ему имя (Name) resultLabel, и очисти свойство Caption (он будет пустым). Итак, ввывод мы тоже организовали. Теперь основной элемент, который будет обрабатывать все. Как известно система реагирует на что-то, когда человек нажал кнопку (тот же самый форум отправит сообщение, когда ты нажмешь на кнопку "Отправить"), поэтому ее мы тоже расположем на форме TButton. Измени ее имя на startButton, а так же свойство Caption на "Вставить". С дизайном закончили, теперь давай приступим к кодированию. Нажми клавишу F12 и ты перейдешь к листингу программы. Там описываются переменные, типы, константы, используемые модули и сам текст программы. Итак, после раздела uses вставь строчку:
Code Sample:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const // раздел констант n=7;
Т. е. n у нас теперь есть размер массива. Теперь объявим тип, для этого в разделе Type до описания формы, вставь:
Code Sample:
type // опишем тип массива TArray = array [1..n] of integer; TForm1 = class(TForm) Label1: TLabel; arrayEdit: TEdit; ...
Таким образом ты описала тип массива (я думаю, ты уже с этим знакома ) Обрати внимание он у меня целочисленный. Все основные приготовления закончены. Итак, давай опять перейдем на форму выделим startButton и щелкнем по ней два раза (это аналогично выбору действия на вкладке Events события onClick), т. е. если говорить совсем примитивно, ты таким образом сказала, "что нужно сделать программе, если нажмут на кнопку "Вставить"". Итак, здесь будет основной код программы:
Code Sample:
procedure TForm1.startButtonClick(Sender: TObject); var i: byte; _mas: TArray; begin // запишем в _mas элементы из arrayEdit _mas:=getArrayFromStr(arrayEdit.Text, n); // обрабатываем массив _mas ... // выведем массив _mas for i:=1 to n do resultLabel.Caption:=IntToStr (_mas [ i ]) + ' '; end;
Теперь я объясню что я написал. Смотри, первая функция которая получает из строки значения массива. Она написана мной, и подойдет для любого числа элементов массива, вот ее описание, ты должна это добавить ДО процедуры обработчика кнопки:
Code Sample:
// функция возвращает массив из строки source, //заданной длины length function getArrayFromStr (source: string; const _length: integer): TArray; var _arr: TArray; i, p: byte; begin i:=0; // cчетчик количества элементов source:=source+' '; while (i<>(_length)) do begin p:=1; // начальный индекс строки while source[p]<>' ' do // ищем позицию разделителя inc (p); dec(p); _arr[ i ]:=StrToInt(copy(source, 1, p)); inc(i); delete(source, 1, p); // удалим число вместе с разделителем //удаляем лишние пробелы перед следующим числом p:=1; while source[p]=' ' do inc(p); dec(p); delete (source, 1, p); end; getArrayFromStr:=_arr // в итоге возвратим массив end;
Тебе не надо разбираться с этим кодом (если у тебя малый опыт, он может показаться немного сложным, но я оставил комментарии). Суть его вот в чем. У тебя есть строка (входное параметр source) и количество элементов, которые надо получить, т. е. дана скажем строка: 15 25 14 45 74 87 То эта процедура считает все значения разделенные через пробел и запишет первые _length в массив типа TArray, после чего она его вернет. Почему строка??? Сейчас объясню. Смотри вот если поле у arrayEdit.Text, оно хранит значение, которое вбили в это поле, т. е. ты вводишь строчку в Edit, а программа может узнать, что ты там ввела при помощи обращения Edit.Text. Дак вот это поле по умолчанию текстовое, т. е. типа string. Как ты знаешь, в паскале нельзя путать типы. у тебя целочисленный массив, поэтому необходимо использовать функции привидения типов. Сейчас я из перечислю: IntToStr (source: int64): string; Переводит из целочисленного значения указанного в source в строковое string, отсюда и название "integer to string". StrToInt (source: string): int64; то же самое, но наоборот, из строки в целочисленное значение. Теперь думаю стало понятно. Еще раз обращаю внимание как дожны быть описаны процедуры, смотри:
Code Sample:
function getArrayFromStr (source: string; const _length: integer): TArray; begin ... end; ... procedure TForm1.startButtonClick(Sender: TObject); begin ... end;
вот теперь вроде все. Почему именно такое расположение? Потому что испозуема процедура должна быть описана раньше, чем к ней обращаются (это правило действует только для процедур, а не для описанных методов). Вот этого материала дожно хватить, чтобы ты сделала программу. Вопросы будут, задавай. Код работающий, все тестировалось. (Сообщение отредактировал KMA 24 янв. 2008 12:01)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 янв. 2008 11:58 | IP
|
|
Kollisto
Новичок
|
Уважаемый, KMA, СПАСИБО ВАМ ОГРОМНЕЙШЕЕ!!!:-) Я Вам очень благодарна. Спасибо, что все разъяснили, буду теперь разбираться. Вы делаете доброе дело, спасибо Вам за это, УДАЧИ Вам и всего хорошего!!!!!!!!!!!!!!!!:-)
|
Всего сообщений: 6 | Присоединился: январь 2008 | Отправлено: 24 янв. 2008 20:28 | IP
|
|
Nonse
Новичок
|
Здраствуйте ! можете помочь с данной задачей плз. Дана последовательность ,содержащая от 1 до 30 слов ,в каждом из которых от 1 до 5 прописных (больших) латинских букв : между соседними словами - не менее одного пробела ,после последнего слова -точка. Указать слова ,в которых есть повторяющиеся символы. (Данная лаба была по теме "Обработки строк ") Заранее спасибо (Сообщение отредактировал Nonse 5 апр. 2008 14:59)
|
Всего сообщений: 2 | Присоединился: апрель 2008 | Отправлено: 5 апр. 2008 14:57 | IP
|
|
|