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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2010, 14:59
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию Вывод наименьшего числа из внешеного файла

Вот такое задание:
"Разработайте программу, определяющую наименьшее значение из внешнего файла, распечатайте это значение."

Почему то, как не делаю, всегда выводит "0"!
может кто уже делал такое или увидит мою ошибку буду очень признателен.

PHP код:
procedure TForm1.Button2Click(SenderTObject);
var 
f:textfile;
    
a:array [1..100000of double;
    
d:integer;
    
n,i:integer;
    
min:double;
   
begin
    
If OpenDialog1.Execute           //открыть диалог для поиска файла
         
then begin
assignfile 
(f,'text1.txt');
 
reset(f);
    
readln(f,n);
    
readln(f,min);
    
a[1]:=min;
    for 
i:=2 to n do
      
begin
        readln
(f,a[i]);
        if 
a[i]<min then begin min:=a[i]; end;
         
end;
         
label3.Caption:=floattostr(min);
      
closefile(f);
    
end
else SHowMessage('ошбка сохранения!');
 exit;
end
Ответить с цитированием
  #2  
Старый 09.04.2010, 16:04
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Не
Код:
a[1]:=min;
а
Код:
min:=a[1];

а зачем массив?
Ответить с цитированием
  #3  
Старый 09.04.2010, 17:06
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

а как ещё можно?

просто ни чего лучше не придумал...
Ответить с цитированием
  #4  
Старый 09.04.2010, 17:09
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

всё равно 0.
Ответить с цитированием
  #5  
Старый 09.04.2010, 18:07
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Не путайте человека. У него почти все правильно было.
Считывается первая строчка из файла и ее значение присваивается min только вот ошибка ваша в том, что считываете вы строковое значение, а присваиваете уже переменной double.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 09.04.2010, 20:25
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

Ввожу новую переменную, меняю тип, при загрузке файла вылезает ошибка:
"is not a valid floating point value"

Если у кого есть лишние 15минут, попробуйте прикинуть программу плс...
Ответить с цитированием
  #7  
Старый 09.04.2010, 23:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вот рабочий вариант, смотрите:
Код:
uses
  SysUtils;

var
  f:textfile;
  a: array [1..100000] of double;
  d: integer;
  n,i: integer;
  min: double;
  s: String;
begin
 assignfile(f,'d:\text1.txt');
 reset(f);
 readln(f, s);
 n := StrToInt(s);
 readln(f, s);
 min := StrToFloat(s);
 a[1] := min;
 for i := 2 to n
 do begin
    readln(f, s);
    a[i] := StrToFloat(s);
    if a[i] < min
    then min := a[i];
    end;
 WriteLn(FloatToStr(min));
 ReadLn;
 Closefile(f);
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 10.04.2010, 00:02
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

Большое спасибо!

Но почему то всё равно не работает, и вылезает:

"is not a valid floating point value" !!!

Можете объяснить почему и как исправить?
Ответить с цитированием
  #9  
Старый 10.04.2010, 00:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

У вас видимо в файле данных содержатся значения с нарушением формата представления Float. Какой разделитель знаков у вас там стоит?
Еще раз предлагаю, выложите здесь файл данных.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 10.04.2010, 00:32
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

вот так, в принципе всё должно работать, видимо ошибка в переменных...

PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrls;

type
  TForm1 
= class(TForm)
    
Label1TLabel;
    
Button1TButton;
    
OpenDialog1TOpenDialog;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(SenderTObject);
var
  
f:textfile;
  
a: array [1..100000of double;
  
dinteger;
  
n,iinteger;
  
mindouble;
  
sString;
begin
 
If OpenDialog1.Execute           //открыть диалог для поиска файла
         
then begin
 assignfile
(f,'d:\text1.txt');
 
reset(f);
 
readln(fs);
 
:= StrToInt(s);
 
readln(fs);
 
min := StrToFloat(s);
 
a[1] := min;
 for 
:= 2 to n
 
do begin
    readln
(fs);
    
a[i] := StrToFloat(s);
    if 
a[i] < min
    then min 
:= a[i];
    
end;
label1.caption:=(FloatToStr(min));
 
ReadLn;
 
Closefile(f);
 
end
else SHowMessage('ошбка сохранения!');
 exit;
 
end;

end
Ответить с цитированием
  #11  
Старый 13.04.2010, 21:43
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

получилось вот так:
Если числа записаны в столбик и меньше нуля, то всё работает, а если все числа больше нуля, то выдаёт '0' !!!
В чём ошибка?


PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrls;

type
  TForm1 
= class(TForm)
    
Label1TLabel;
    
Button1TButton;
    
OpenDialog1TOpenDialog;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(SenderTObject);
var 
f:textfile;
    
a:array [1..100000of double;
    
i:integer;
    
min:double;
    
adress:string;
begin
 
If OpenDialog1.Execute           //открыть диалог для поиска файла
         
then begin
   assignfile
(f,OpenDialog1.FileName);
    
reset(f);
    
readln(f,min);
    
a[1]:=min;
    for 
i:=2 to 1000 do
      
begin
        readln
(f,a[i]);
        if 
a[i]<min then begin min:=a[i];
        
end;
          
end;
           
label1.Caption:='наименьшее число = '+floattostr(min);
   
closefile(f);
end

else SHowMessage('Файл не выбран!');
 exit;
 
end;

end
Ответить с цитированием
  #12  
Старый 13.04.2010, 22:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Здесь:

a[1]:=min;

заменить на:

min:=a[1];
Ответить с цитированием
  #13  
Старый 13.04.2010, 23:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от lmikle
Здесь:

a[1]:=min;

заменить на:

min:=a[1];
А вы в этом точно уверены? Внимательно код посмотрите.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 13.04.2010, 23:21
luceu luceu вне форума
Прохожий
 
Регистрация: 09.04.2010
Сообщения: 9
Репутация: 10
По умолчанию

Как только не менял, всё равно при наличии отрицательных чисел работает, при их отсутствии выводит 0!
Ответить с цитированием
  #15  
Старый 13.04.2010, 23:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Страдалец, да, был не прав, вспылил.
Только вообще не понятно нафига там массив тогда???

Код:
function FindMinInFile(AFileName : String) : Double;
var
  L : TStringList;
  I : Integer;
begin
  L := TStringList.Create;
  L.LoadFromFile(AFileName);
  Result := StrToFloat(L[0]);
  For I := 1 To L.Count-1 Do
    If Result > StrToFloat(L[i]) Then Result := StrToFloat(L[i]);
  L.Free;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter