Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.12.2010, 18:07
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию надо найти в этом массиве 3 наибольших и записать их в текстовый файл

Код:
procedure TfrmMain.Button1Click(Sender: TObject);
var
 // число точек в исходных данных и в результатах
 In_N : Integer;
 // массив с исходными данными
 In_Data: array of Double;
 // переменная для записи в файл
DataFile : TextFile;[/quote]
 // переменная цикла
 i: Integer;
 // линия для графика - если нужна
 Line : TLineSeries;
begin
 // получение числа точек в исходных данных с формы
 In_N := 35;
 ////////////////////////////////////////// In_N :=StrToInt(edValN.Text);
 // получение параметра - пример
 ///////////////////Scale := StrToFloat(eScale.Text);
 // создаем массив данных
 // вначале задаем размер массива
 SetLength(In_Data,In_N);
 // задаем элементы массива
 for i := 0 to In_N - 1 do
     In_Data[i] := Cos(i*In_N)*Exp(-i*0.44)+1;
   MemoOut.Clear;
 // и покажем новые
 for I := 0 to In_N - 1 do
     // Format() - преобразование числа в строку по указанному
     // формату. Подробнее и с примерами в справке Delphi - F1.
     MemoOut.Lines.Add(Format('%8.3f',[In_Data[i]]));
 // *** добавим график - если нужно
 // уберем старый график
 ChartMain.SeriesList.Clear;
 // создадим новый
 Line := TLineSeries.Create(ChartMain);
 // присвоим значения Y координат
 Line.AddArray(In_Data);
 // изменим цвет и толщину линии
 Line.LinePen.Color := clBlue;
 Line.LinePen.Width := 1;
 // и выведем на форму
 ChartMain.AddSeries(Line);
 // свяжем переменную с файлом DataFile
AssignFile(DataFile,'in.txt');
 // откроем для записи
Rewrite(DataFile);
 // запись параметров
 Writeln(DataFile);   //стояло еще (,Scale)
 // размер массива чисел
 Writeln(DataFile,In_N);
 // каждое значение пишем в новую строку
 for i := 0 to In_N - 1 do
 Writeln(DataFile,In_Data[i]);
//закрываем файл - сохраняем его
 CloseFile(DataFile);
 DeleteFile('out.txt');

end;
запись в текстовый файл тут есть, надо только сделать, так чтобы после того как оно строит график, из массива выбирались 4 наибольших числа, не меняя, своего положения, а дальше сохранялись и передавались в txt
Ответить с цитированием
  #2  
Старый 26.12.2010, 18:24
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Тебе сделали за деньги эту прогу?

Просто пример того, как с задачи "2+2=?" сгородить сотни строк кода.

PHP код:
for := 0 to In_N do
     
In_Data[i] := Cos(i*In_N)*Exp(-i*0.44)+1
Какая-то странная функция.
сos(i*X)*e^(-i*0.44)+1
где х одновременном есть размером массива?

Чесно скажу, сколько в свое время перерешал подобных задач, никогда такого не видел.
При том что в cos значение i*x в радианах....

Последний раз редактировалось Konrad, 26.12.2010 в 18:33.
Ответить с цитированием
  #3  
Старый 26.12.2010, 18:35
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

не не заденьги, нам препод дал пример программы, я просто с неё взял кусок, так а как тут с массивом. что мне надо, плиз?
Ответить с цитированием
  #4  
Старый 26.12.2010, 18:39
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от radiokarazinec@mail.ru
не не заденьги, нам препод дал пример программы, я просто с неё взял кусок, так а как тут с массивом. что мне надо, плиз?
Институт или школа?
Ответить с цитированием
  #5  
Старый 26.12.2010, 18:43
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

институт, радиофак, по спецкурсу, как бы для герадара
Ответить с цитированием
  #6  
Старый 26.12.2010, 18:47
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от radiokarazinec@mail.ru
институт, радиофак, по спецкурсу, как бы для герадара
Ясно.
Ок, сейчас чтонить напишу.

Только уточни:
если поличиться массив, например
1,1,3,1,2,5,5,7,9,9;
считать 4-ре макс элемента как 9,9,7,5.
Или 9,7,5,3?

Последний раз редактировалось Konrad, 26.12.2010 в 18:52.
Ответить с цитированием
  #7  
Старый 26.12.2010, 19:00
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

нет чтобы как они забиты в массиве 5,7,9,9
Ответить с цитированием
  #8  
Старый 26.12.2010, 19:22
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Вот что нагородил:

Печатает значения функции и 4ре макс элемента
PHP код:
procedure TForm1.Button2Click(SenderTObject);
var
In_Data:array of real;
In_N,i,j:integer;
max:array[1..4of real;
maxn:array[1..4of integer;
begin
  In_N
:=35;
  
SetLength(In_Data,In_N);
for 
:= 0 to In_N do
begin
  In_Data
[i]:= Cos(i*In_N)*Exp(-i*0.44)+1;
  
memo1.lines.add('f('+inttostr(i)+')= '+floattostr(In_Data[i]));
end;

memo1.lines.add('=========================');
for 
i:=1 to 4 do
maxn[i]:=0;
max[1]:=In_Data[1];
for 
:= 0 to In_N do
 
begin
 
if (max[1]<In_Data[i]) then
 begin
  max
[1]:=In_Data[i];
  
maxn[1]:=i;
 
end;
 
end;
 
memo1.lines.add('max #1 = '+floattostr(max[1]));

for 
j:=2 to 4 do
begin
 max
[j]:=0;
for 
:= 0 to In_N do
 
begin
 
if (max[j]<In_Data[i])and(In_Data[i]<=max[j-1])and(maxn[j-1]<>ithen
 begin
  max
[j]:=In_Data[i];
  
maxn[j]:=i;
 
end;
 
end;
 
memo1.lines.add('max #'+inttostr(j)+' = '+floattostr(max[j]));
end;

end
Кнопка, мемо.

Правда код мне не особо нравится.
Писал его, одновременно говорил по тел, и смотрел краем глаза фильм
Так что уж извиняйте

Последний раз редактировалось Konrad, 26.12.2010 в 19:47.
Ответить с цитированием
  #9  
Старый 26.12.2010, 19:50
com+ com+ вне форума
Прохожий
 
Регистрация: 26.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Уж извольте, на быструю руку набросал, можете попробывать
Код:
procedure Sort( var AResult:array of Double);
var
  j: Integer;
  tmp : Double;
begin
  for j :=Low(AResult) to High(AResult) - 1 do
    if AResult[j] > AResult[j+1] Then
    begin
      tmp := AResult[j];
      AResult[j] := AResult[j+1];
      AResult[j+1] := tmp;
    end;
end;

procedure Find(const AArray: array of Double;  AFileName:String);
var
  Result: array [0..2] of Double;
  ind :Integer;
  f: Textfile;
begin
  Result[0] := 0; Result[1] := 0; Result[2] := 0;
  for ind:= Low(AArray) to High(AArray) do
  begin
    if AArray[ind] > Result[0] Then
    begin
      Result[0] := AArray[ind];
      Sort(Result);
    end;
  end;
  AssignFile(f, AFileName); {Assigns the Filename}
  ReWrite(f); {Create a new file named ek.txt}
  for ind:= Low(Result) to High(Result) do

    Writeln(f, Format('%8.3f', [Result[ind]]));
  Closefile(f); {Closes file F}
end;
Админ: Не забываем про теги!!

...
Find(In_Data, 'c:\1.txt'); // Найти и сохранить
...

Последний раз редактировалось Admin, 26.12.2010 в 20:02.
Ответить с цитированием
  #10  
Старый 26.12.2010, 20:00
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Так-с, или меня плохо учили программированию в далекие времена.
Или это сейчас ТАК всех учат)))

Ну зачем в цикле тебе еще сортировку массива каждый раз делать?
Чтобы программа работала быстрее?

Последний раз редактировалось Konrad, 26.12.2010 в 20:04.
Ответить с цитированием
  #11  
Старый 26.12.2010, 20:46
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

скажи пожалуйста а куда мне это всё вставлять, я просто вставляю, а оно ничего не изменилось? помоги плиз
Ответить с цитированием
  #12  
Старый 26.12.2010, 20:53
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от radiokarazinec@mail.ru
скажи пожалуйста а куда мне это всё вставлять, я просто вставляю, а оно ничего не изменилось? помоги плиз
Ну правильно, я же вывел все в мемо.
Тебе ж нужно в файл.
Просто допиши сохранение массива
PHP код:
max[i
в файл.
Ответить с цитированием
  #13  
Старый 26.12.2010, 20:57
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

понимаете, у меня ж там еще и график рисует, я там вообще уже запулся что куда вставлять
Ответить с цитированием
  #14  
Старый 26.12.2010, 21:08
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Вот код, который у тебя записывает данные в файл
PHP код:
AssignFile(DataFile,'in.txt');
 
// откроем для записи
Rewrite(DataFile);
 
// запись параметров
 
Writeln(DataFile);   //стояло еще (,Scale)
 // размер массива чисел
 
Writeln(DataFile,In_N);
 
// каждое значение пишем в новую строку
 
for := 0 to In_N do
 
Writeln(DataFile,In_Data[i]);
//закрываем файл - сохраняем его
 
CloseFile(DataFile);
 
DeleteFile('out.txt'); 

Что за файл аут.тхт - не понятно, видимо то что ты привел, только часть кода. Ну не важно.

Вобщем сюда допиши еще сохранение массива, того о котором я писал.

Тоесть в мах[1,2,3,4] найдены макс числа, вот их и сохраняешь.

Не пойму что вызвало затруднения?

Последний раз редактировалось Konrad, 26.12.2010 в 21:14.
Ответить с цитированием
  #15  
Старый 26.12.2010, 21:18
radiokarazinec@mail.ru radiokarazinec@mail.ru вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

а что за циклы от 1 до 4 и от 2 до 4?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter