![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ВОПРОСЫ АЛГОРИТМОВ!
crazy_corpse © (2006-07-14 15:09:00)ПРЕДЛОЖЕНИЕ:
Предлагаю в этом раздельчике писать свои задачи и решения для них, главным здесь будет являться алгоритм решения. Использование каких-то компонентов делфи и вопросы программирования в делфи будет обсуждаться только если это непосредственно может помочь при решении задачи
ПРИЧИНА:
В инете трудно искать алгоритмы некоторых задач, а если здесь начать собирать некоторое подобие задачника то это мне как кажеться будет ничего себе.
ПОЧЕМУ ЗДЕСЬ?
Да потому что тут то все мастера и "вертяться" )). Помогут подскажут.
Еще одним условие или как бы желанием будет улучшение алгоритмов этим мастерами. Надеюсь помогут.
Плохиш (2006-07-14 17:15:00) [21]
> end;//тут она че то по кругу начала того. В паскале проще
> в этом смысле
А ты что хотел. Хочешь сказать, что в паскале циклы подругому работают?
А ну живо пошёл азбуку учить.
Jeer (2006-07-14 17:10:00) [22]2006 - 1985 = 6
Нарушаем арифметику.
crazy_corpse (2006-07-14 17:02:00) [23]Следующая задача:
Введите некоторое малое число eps>0, имеющее смысл погрешности вычисления (например, 0,001; 0,0005 и т.д.), и число x в пределах 0.5<x<10.5 и вычислите следующее выражение:
y=1+x/1!+x^2/2!+...+x^n/n!+...;
Вычисления прекратите, когда очередное слагаемое станет по модулю меньше, чем eps. Выведите x,y,eps и количество использованных слагаемых.
Поехали!
На формочку кидаем лейблы и едиты которые помогут ам ввести eps, и х, и еще один лейбл для вывода нужной инфы.
Щас вот короче начал писать и возни вопросик, Как проверить правильность ввода в edit вот в этой конкретной задаче:
пишу че то типа
procedure TForm1.Button1Click(Sender: TObject);
begin
while (eps<0) or (eps<1) do begin
eps:=strtofloat(edit1.text);
label1.Caption:='Вы вели eps не из диапазона 0..1. Повторите ввод' ;
end;
while (x<0.5) or (x>10.5) do begin
x:=strtofloat(edit2.Text);
label2.Caption:='Вы вели х не из диапазона 0,5..10,5. Повторите ввод';
end;//тут она че то по кругу начала того. В паскале проще в этом смысле
//че надо сделать?
end;
crazy_corpse (2006-07-14 16:37:00) [24]Удалено модератором
Джо (2006-07-14 16:25:00) [25]http://algolist.manual.ru/forum/
Джо (2006-07-14 16:25:00) [26]> а то на этой ссылке ведь не форум там опфтом то не поделишься.
Там есть и форум, зачем дезинформировать?
crazy_corpse (2006-07-14 16:09:00) [27]http://algolist.manual.ru
кстати по этой ссылке действительно можно нарыть много инфы, но ведь задачи решаемы в универах достаточно однообразны, и я хотел просто помочь новичкам ведь имея готовый алгоритм все просто. Да и самому было бы полезно посмотреть да пообсуждать на пригодность и универсальность сами алгоритмы а то на этой ссылке ведь не форум там опфтом то не поделишься.
crazy_corpse (2006-07-14 16:03:00) [28]Удалено модератором
crazy_corpse (2006-07-14 15:59:00) [29]Вот и первая моя задачка и к ней алгоритмик начнем с малого, прошу все совету по алгоритму писать не укоснительно если они возникают конечно))
Задача
Введите некоторое количество вещественных чисел. Определить произведение минимального и максимального из них.
Решение
Ну как мне кажеться числа надо вводить в массив и потом сортировать его. А как вам? Может надо просто при вводе запоминать минимальный сразу и сравнивать его с последующими? Но как бы то не было пишу алгоритм с массивом.
//процедура ввода массива
//сразу возникает вопрос может можно использовать динамический массив каким то образом?
const
nmax=100;
type
tmy_array=array [1..nmax] of real;
var
a:tmy_array;
n:integer=1;
{$R *.dfm}
// вводим числа
procedure TForm1.VvestiClick(Sender: TObject);
begin
a[n]:=strtofloat(edit1.Text);
n:=n+1;
end;
var
min:real;
imin,s:integer;
i:integer;
procedure TForm1.KonecClick(Sender: TObject);
begin
//n получилась на еденицу больше так что надо бы убрать
n:=n-1;
vvesti.Visible:=false;// убераем кнопочку она нам не нужна больше
//сортировка выбором можно обсудить более "лучший метод" сортировки
for s:=1 to n-1 do begin
min:=a[s];
imin:=s;
for i:=s+1 to n do
if a[i]<min then begin
min:=a[i];
imin:=i;
end;
a[imin]:=a[s];
a[s]:=min;
end;
// Перемножаем первый и последний член
label1.caption:='Произвдеенеие первого и последнего члена равно '+
floattostr(a[1])+'*'+floattostr(a[n])+'='+floattostr(a[1]*a[n]);
//Убираем и эту кнопку показываем кнопку выхода из программы
close.Visible:=true;//для этого выбираем компоненнт bitbtn на вкладке additional и выставяем свойству kind значение bkclose;
close.Kind:=bkclose;
konec.Visible:=false;
end;
Ну вот вроде все. Для примера.
unknown (2006-07-14 15:20:00) [30]Кладовку и единую базу процедур и ф-й для чего придумывали?
Джо (2006-07-14 15:19:00) [31]Автору: есть такой проект http://algolist.manual.ru
DrPass (2006-07-14 15:17:00) [32]
> Предлагаю в этом раздельчике писать свои задачи и решения
> для них
Ага. Ветка на одном из самых болтливых технических форумов Рунета - самое подходящее место для размещения базы алгоритмов и решений.
Vlad (2006-07-14 15:16:00) [33]
> crazy_corpse © (14.07.06 15:09)
Так тут целый форум этому посвящен, зачем выдлять специальный раздел?
Джо (2006-07-14 15:15:00) [34]Так алгоритмы чего? Ж:)