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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2016, 20:56   #1
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию За первым четным числом поставить утроенное произведение того числа .

Дан текстовый файл input.txt, в котором хранятся целые числа. Создать упорядоченный по возрастанию список. За первым четным числом поставить утроенное произведение того числа . Полученную последовательность записать в тестовый фаил output.txt. Если четных чисел нет , помимо последовательности в фаил записать соответствующее сообщение.

Тут почти всё есть, помогите со 2-ой частью программы .
И нужно написать это по Unit-ам. Подскажите пожалуйста, как это сделать .


Код:
uses
type
TInfo=integer;
Tlist=~Node;
Node=record
info:TInfo;
next:Tlist;
end;

procedure Init(var L:Tlist);
BEGIN
new(L);
L^.next:=nil;
end;

Function Empty(L:Tlist):boolean;
begin
result:=L^.next:=nil;
end;

Procedure Add_to_head(var PNode:Tlist; new_element:Tinfo);
var p:Tlist;
begin
new(p);
p^.info:=new_element;
p^.next:=PNode^.next;
Pnode^.next:=p;
end;

Function Del_After_Node(var Pnode:Tlist):Tinfo;
var p:Tlist;
begin
p:=PNode^.next;
PNode^.next:=p^.next;
result:=p^.info;
p^.next:=nil;
dispose(p);
end;

Function Found_Place(L:Tlist; new_element:Tinfo):TList;
begin
result:=L;
While(result^.next<>nil) and (result^.next^.info< new_element) do 
result:=result^.next;
end;

Procedure Create_Order_from_file(var L:Tlist; file_name:string);
var f:Textfile;
new_element:Tinfo;
place:Tlist;
begin
Init(L);
Assign File (f,file_name);
Reset(f);
While not eof(f) do
begin
read(f,new_element);
place:=Found_place(L, new_element);
Add_after_Node(Place,new_element);
end;
close File(f);
end;

Procedure Print_to_file(L:Tlist; file_name:string);
var
p:Tlist;
f:Textfile;
begin
p:=L^.next;
Assign File(ffile_name);
Rewrite(f);
While p<> nil do
begin
Write(f,p^.info, ' ');
p:=p^.next;
end;
Close File(f);
end;

Procedure Clear(var L:Tlist);
begin
While not Empty(L) do
Del_after_Node(L);
dispose(L);
end;
//основное тело программы
Var L:Tlist;
begin
SetCousdOutputCP(1251);
(SetConsoleCP(1251);
Create_Order_from_file(L,'input.txt');
Print_to_file(L,'input.txt');
Clear(L);
Writeln('Файл создан ');
readln;
end;
.....

Последний раз редактировалось Smile189; 01.10.2016 в 21:58.
Smile189 вне форума Ответить с цитированием
Старый 02.10.2016, 08:35   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Что за файл "input.txt"? Как в нём храняться числа?
FaTaL вне форума Ответить с цитированием
Старый 02.10.2016, 10:42   #3
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию

я не совсем поняла ваш вопрос. В файл input мы от руки набираем числа , ели речь про это
Smile189 вне форума Ответить с цитированием
Старый 02.10.2016, 11:30   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Цитата:
Сообщение от Smile189 Посмотреть сообщение
я не совсем поняла ваш вопрос. В файл input мы от руки набираем числа , ели речь про это
Ну числа то как разделены?
FaTaL вне форума Ответить с цитированием
Старый 02.10.2016, 11:46   #5
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию

???
из вот этого: 1 3 5 8...
должно это получиться : 1 3 5 8 24...
Smile189 вне форума Ответить с цитированием
Старый 02.10.2016, 11:54   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Ну тогда если попроще, то грузишь файл в TStringList (каждое число отдельной строкой), потом делаешь сортировку. Затем в цикле пробегаешься по каждому элементу списка и записываешь в новый TStringList. Сохраняешь на диск.
FaTaL вне форума Ответить с цитированием
Старый 02.10.2016, 12:27   #7
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию

Спасибо конечно, но я и написала сюда, потому что не понимаю как это сделать...то, что вы словами написали мне никак не поможет
Smile189 вне форума Ответить с цитированием
Старый 03.10.2016, 12:49   #8
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

попробуйте этот код:
Код:
//сортирует массив чисел и утраивает первое четное (если есть)
{Вход:
   AFileName - полный путь к файлу с числами в формате N1<пробел>N2<пробел>..Nm
}
procedure TripleSort(const AFileName:string);
var
  i,n:Integer;
  LIsFindEven:Boolean;
begin
  //создаем список чисел
  with TStringList.Create do
    try
      //разделяем по пробелу
      LineBreak:=' ';

      //грузим числа из файла
      LoadFromFile(AFileName);

      //сортируем по возрастанию
      Sort;// --->todo! корректно сортирует числа с одинаковым числом разрядов - доделать самой как упражнение :)

      //ищем первое четное и утраиваем (если нашли)
      LIsFindEven:=False;
      for i:=0 to Count-1 do
        begin
          n:=StrToInt(Strings[i]);
          LIsFindEven:=(not Odd(n)) and (n<>0);
          if LIsFindEven then
            begin
              n:=3*n;
              Insert(i+1,IntToStr(n));
              Break;
            end;
        end;

      //если не нашли ни одного четного
      if (not LIsFindEven) then
        //записываем доп. сообщение
        Add('Четных чисел нет');

      //сохраняем результат
      SaveToFile(ExtractFilePath(AFileName)+'output.txt');
    finally
      Free;
    end;
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 03.10.2016, 17:20   #9
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию

спасибо
Smile189 вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверить является четным числом длина введенной пользователем строки и вывести сообщение на экран (оплачу пополнением счета) Pomogi Фриланс 2 14.01.2013 17:25
Определить, сумма цифр является четным или нечетным числом. harvey Помощь студентам 1 10.10.2012 21:38
выравнивание по четным и не четным страницам uli4ka Microsoft Office Word 2 04.07.2011 13:53
Поиск по первым двум цифрам числа IPI Паскаль, Turbo Pascal, PascalABC.NET 1 23.01.2011 15:33
2 столбец для того, чтобы автоматически создавались числа, которые позволяли уравнивать числа в 3 столбце ppv Microsoft Office Excel 37 05.08.2009 21:19