Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 03:01   #1
katia230990
 
Регистрация: 24.02.2008
Сообщений: 8
Радость Delphi Работа с файлами. Помогите пожалуйста отредактировать программу))

Составила программу для решения этой задачи:

Дан массив X, содержащий вещественные числа. Найти и записать на место X(1) — наибольший элемент массива X, а на место X(N) — наименьший элемент массива (X1,X2,...,XN). Ввод исходного массива X осуществить из файла на диске. Вывод обеспечить в трех вариантах:1)на экран; 2)на печатающее устройство; 3)в файл на диске.

Только вот почему-то не работает функция ввода данных из файла,и замены элементов массива и вывода результата на экран... Функцию замены элементов я просто не дописала,а всё остальное вроде должно было работать... Помогите пожалуйста отредактировать))
Буду оч. признательна =))
Вложения
Тип файла: rar programma).rar (178.6 Кб, 15 просмотров)

Последний раз редактировалось katia230990; 02.06.2008 в 03:19.
katia230990 вне форума Ответить с цитированием
Старый 02.06.2008, 07:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Катя:
1. Ввод данных из файла падает поскольку ты задала NameFile:String[20]; Всего то 20 символов для имени файла? Зачем?
И какого ты закрываешь файл прям в цикле? делай так:
Код:
procedure TForm1.N1Click(Sender: TObject);
var
F:TextFile;
NameFile:String[20];
i:integer;
x:array[1..20] of real;
begin
if not od1. Execute then Exit;
NameFile:=od1.FileName;
AssignFile(F,od1.FileName);
Reset(F);
i:=0;
While not Eof(F) do
begin
Read(F,x[i]);
Memo1.Lines.Add(FloatToStr(x[i]));
end;
CloseFile(F);
end;
А еще лучше так:
Код:
procedure TForm1.N1Click(Sender: TObject);

begin
if od1. Execute then Memo1.Lines.LoadFromFile(od1.FileName);
end;
Далее по программе я не обьясняю потому как понять твои мысли не могу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2008, 03:19   #3
katia230990
 
Регистрация: 24.02.2008
Сообщений: 8
По умолчанию

Спасибо большое =)
katia230990 вне форума Ответить с цитированием
Старый 03.06.2008, 14:45   #4
katia230990
 
Регистрация: 24.02.2008
Сообщений: 8
По умолчанию

Осталась одна проблема - замена элементов массива и вывода результата на экран... В результате всех действий программа выдаёт "0" :

Код:
procedure TForm1.N3Click(Sender: TObject);
var
NameFile:String[20];
F:TextFile;
a:array [0..20] of real;
b:array [0..20] of real;
i,nmax,nmin:byte; n,max,min:integer;
begin
N3.Checked:=True;
n:=Memo1.Lines.Count; // количество чисел,считанных из файла
for i:=1 to n do
a[i]:=Memo1.Lines[i];
max:=a[0]; nmax:=0; // максимальный элементь и его номер
min:=a[0]; nmin:=0;
for i:=1 to n do
begin
if a[i]>max then
begin
max:=a[i];
nmax:=i
end;
if a[i]<min then
begin
min:=a[i];
nmin:=i
end;
end;
nmax:=min;
nmin:=max;
for i:=0 to n-1
Memo2.Lines.Add(FloatToStr(b[i+1]));
end;
katia230990 вне форума Ответить с цитированием
Старый 03.06.2008, 15:24   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от katia230990 Посмотреть сообщение
Осталась одна проблема - замена элементов массива и вывода результата на экран... В результате всех действий программа выдаёт "0" :
for i:=0 to n-1
Memo2.Lines.Add(FloatToStr(b[i+1]));

А где заполняется массив b ?
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 15:37   #6
katia230990
 
Регистрация: 24.02.2008
Сообщений: 8
По умолчанию

Да я уже переписала по-другому))) :

Код:
procedure TForm1.N3Click(Sender: TObject);
var
MaxN, MinN, MaxI, MinI, i, n : Integer;
A:array[1..20] of Real;  
begin
N3.Checked:=True;
n := Memo1.Lines.Count;
for i:=0 to n - 1 do A[i+1] := StrToFloat(Memo1.Lines[i]); 
MaxN := a[1]; MaxI := 0;
MinN  := a[1]; MinI  := 0;
for i:=2 to n do begin
if a[i] > max then begin
MaxN := a[i];
MaxI := i;
end;
if a[i] < min then begin
MinN := a[i];
MinI := i;
end;
end;
a[1] := MaxN;
a[n] := MinN;
Memo2.Lines.Clear;
for i:=1 to n do Memo2.Lines.Add(FloatToStr(a[i])); 
end;
И возникла другая проблема: во время компиляции, компилятор выводит сообщение об ошибке:
Incompatible types Integer and Real. Я так понимаю, что при выполнении проверки тип выражения не соответствует типу переменной,и надо выбрать другой тип переменной...но чтот я не могу домуматься,какой именно))
katia230990 вне форума Ответить с цитированием
Старый 03.06.2008, 16:16   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Внимательнее с объявлением и использованием переменых

Код:
var MaxN, MinN : real;
    i, n : Integer;
    A:array[1..20] of Real;
begin
   n := Memo1.Lines.Count;
   for i:=0 to n - 1 do A[i+1] := StrToFloat(Memo1.Lines[i]);

   MaxN := a[1]; //MaxI := 1;
   MinN := a[1]; //MinI := 1;
   for i:=2 to n do begin
      if a[i] > maxN then begin
         MaxN := a[i];
         //MaxI := i;
      end;
      if a[i] < minN then begin
         MinN := a[i];
         //MinI := i;
      end;
   end;
   a[1] := MaxN;
   a[n] := MinN;
   Memo2.Lines.Clear;
   for i:=1 to n do Memo2.Lines.Add(FloatToStr(a[i]));
alexBlack вне форума Ответить с цитированием
Старый 03.06.2008, 16:24   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
MaxN := a[1];
Ну дык сделай MaxN и прочие контактирующие с массивом переменки такого же типа как и массив
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2008, 16:52   #9
katia230990
 
Регистрация: 24.02.2008
Сообщений: 8
По умолчанию

Всё,со всем разобралась)) спасибо=) теперь всё работает

Последний вопрос:
вот исходный массив:

4
-7
8
2
5

а вот преобразованный программой:

8
-7
8
2
-7

Я правильно поняла условие задачи - нужно просто заменить первый элемент наибольшим, а последний наименьшим? или поменять местами первый с наибольшим,а последний с наименьшим?))
katia230990 вне форума Ответить с цитированием
Старый 03.06.2008, 16:57   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, все правильно поняла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу для зачета (Работа с файлами) Барби Общие вопросы C/C++ 6 22.12.2007 15:40
Работа с текстовым файлом (delphi). Помогите доделать программу. Snord Помощь студентам 1 14.12.2007 14:10
Помогите пожалуйста написать программу в Delphi... Марго Фриланс 6 25.10.2007 01:25
Не могу понять как отредактировать программу asale Microsoft Office Excel 1 31.01.2007 20:57