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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2017, 20:05   #1
Hamza117
Пользователь
 
Регистрация: 04.10.2017
Сообщений: 10
По умолчанию Помогите с циклом! (вложенные циклы и сохранять результаты вычислений в текстовые файлы)

procedure TForm1.Button1Click(Sender: TObject);
var
g,j,l,t,k,W,I: integer;
sum,N,S: LongInt;
APath, AFileName: string;

begin
for W := 15 to 170 do //цикл вроде начинается, но только для 15 данные сохраняет.
begin
N := StrToInt (Label1.Caption);//число 36.
S := (W);
Memo1.Lines.Clear;
for g :=1 to N do//Эту часть, цикл, почему то, делает только 1 раз.
for j :=g+1 to N do
for l :=j+1 to N do
for t :=l+1 to N do
for k :=t+1 to N do
if (g<>j) and (g<>l) and (g<>t) and (g<>k) and (j<>l) and (j<>t) and (j<>k) and (l<>t) and (l<>k) and (t<>k) then begin
sum := g + j + l + t + k;
if (sum = S) then
Memo1.Lines.Add (IntToStr(g)+''+IntToStr(j)+''+IntT oStr(l)+''+IntToStr(t)+''+IntToStr( k));

APath := 'C:\Users\Максим\Desktop\Тест\';//сохранение данных.
for I := 15 to 170 do
begin
AFileName := APath + IntToStr(I) + '.txt';
if not FileExists(AFileName) then
begin
Memo1.Lines.SaveToFile(AFileName);
end;
end;
end;
end;
end;
end.
Вот код программы.
Я хочу что бы она выполняла мой код с изменением переменной N в цикле от 15 до 170. Но программа делает это только 1 раз, никак не могу понять, почему...
Помогите!!!
Hamza117 вне форума Ответить с цитированием
Старый 08.11.2017, 21:16   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,537
По умолчанию

Я не поленился, скомпилировал и запустил.
Создалась куча файлов типа 15.txt, 16.txt, .... 170.txt - больше сотни, не считал, прогу пришлось прервать. Каждый - по 7 байт.
Так что все работает. Проверяйте свою Label1 - с самом деле там 36 или нет.

А вообще код какой-то бредовый, хотя рабочий. Только в одном месте пробел убрать - IntT oStr(l)

Впервые вижу, чтобы число задавалось StrToInt (Label1.Caption)

Последний раз редактировалось type_Oleg; 08.11.2017 в 21:19.
type_Oleg вне форума Ответить с цитированием
Старый 08.11.2017, 22:44   #3
Hamza117
Пользователь
 
Регистрация: 04.10.2017
Сообщений: 10
По умолчанию

Мне нужно что бы в эти файлы сохранялись эти вычисления
for g :=1 to N do
for j :=g+1 to N do
for l :=j+1 to N do
for t :=l+1 to N do
for k :=t+1 to N do
if (g<>j) and (g<>l) and (g<>t) and (g<>k) and (j<>l) and (j<>t) and (j<>k) and (l<>t) and (l<>k) and (t<>k) then begin
sum := g + j + l + t + k;
if (sum = S) then
Memo1.Lines.Add (IntToStr(g)+''+IntToStr(j)+''+IntT oStr(l)+''+IntToStr(t)+''+IntToStr( k));
Но сохраняется только 1 вычисление т.е для 15, а для всех остальных чисел нет.(в каждом текстовом файле от 15 до 170 будет одно и тоже 1 2 3 4 5(сумма этих чисел 15)) цикл почему то заканчивается на 15, хотя он должен вычислять для каждого числа от 15 до 170 (for W := 15 to 170 do)
Hamza117 вне форума Ответить с цитированием
Старый 08.11.2017, 22:55   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
if (g<>j) and (g<>l) and (g<>t) and (g<>k) and (j<>l) and (j<>t) and (j<>k) and (l<>t) and (l<>k) and (t<>k) then
А это зачем? Они и так никогда не будут равны
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2017, 23:39   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,537
По умолчанию

А вообще - что надо ?
Судя по коду - 100500 раз создавать кучу файлов.
Или все же надо что-то накапливать в один файл ?
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2017, 07:29   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык спортлото ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.11.2017, 10:02   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Hamza117 Посмотреть сообщение
Мне нужно что бы в эти файлы сохранялись эти вычисления
если правильно Вас понял, тогда:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  g, j, l, t, k, W, N: LongInt;
  APath: string;
  TS: TStringList;
begin
  TButton(Sender).Enabled := false;
  TS := TStringList.Create;

  N := 36; //StrToInt(Label1.Caption); //число 36.

  APath := 'C:\Users\Максим\Desktop\Тест\'; //путь для сохранение данных.

  for W := 15 to 170 do
  begin
    TS.Clear;
    for g := 1 to N do
      for j := g + 1 to N do
        for l := j + 1 to N do
          for t := l + 1 to N do
            for k := t + 1 to N do
              if ((g + j + l + t + k) = W) then
                TS.Append(IntToStr(g) + ' ' + IntToStr(j) + ' ' + IntToStr(l) + ' ' + IntToStr(t) + ' ' + IntToStr(k));

    TS.SaveToFile(APath + IntToStr(W) + '.txt');
  end;
  TButton(Sender).Enabled := true;
  FreeAndNil(TS);  
  Application.MessageBox(PChar('Всё файлы сохранены в каталоге '+APath), 'Информация', MB_ICONINFORMATION or MB_OK);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2017, 15:27   #8
Hamza117
Пользователь
 
Регистрация: 04.10.2017
Сообщений: 10
Смущение

ДА!!! Блестяще!!! Именно то, что нужно было.Если это было легко сделать, не судите меня, я новичок ещё. Тему можно закрывать.
Можно ещё две вещи спросить? Мне нужно открывать их(файлы с расчётами) из другой программы и сохранить изменения в ЭТОМ же файле(Только без SaveDialog(долго тыкать))
И вторая вещь, в memo1 есть 5 строк
1 2 3 4 10
1 2 3 5 9
1 2 3 6 8
1 2 4 5 8
1 2 4 6 7
В memo2 есть 2 строчки
1 2 3 4 11
1 2 3 6 8
как сделать, что бы по нажатию кнопки удалялись все повторяющиеся строки из memo1?

Последний раз редактировалось Hamza117; 09.11.2017 в 15:46.
Hamza117 вне форума Ответить с цитированием
Старый 09.11.2017, 15:42   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Пожалуйста.

Цитата:
Сообщение от Hamza117 Посмотреть сообщение
Можно ещё одно, мне нужно открывать их(файлы с расчётами) из другой программы и сохранить изменения в этом же файле. Как это сделать?
это текстовые файлы. можно с ними работать как с обычными текстовыми файлами.

начиная с олд-скульного var f : TextFile; Reset(f); Read(f, ...)/ReadLn(f, ...)
продолжая,
можно работать с файлом, как набором байт (см. TFileStream )

и заканчивая - прочитать файл целиком в память (TStringList, метод LoadFromFile()
изменить нужные строки, целиком перезаписать - метод SaveToFile())

какой способ выбрать зависит от того, что именно Вы собираетесь с этим файлом делать.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенные циклы yulia.a Паскаль, Turbo Pascal, PascalABC.NET 5 20.04.2014 13:36
как сохранять текстовые файлы nuberod Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 16.01.2013 13:36
как научить программу сохранять результаты ArtemSK Общие вопросы C/C++ 2 03.01.2010 17:02
Произвести вычисление значений функций. Результаты вычислений вывести в компонент ListBox Настенька..Блонди Помощь студентам 1 10.04.2009 00:32
Сортировать результаты вычислений Jana Microsoft Office Excel 2 03.11.2008 08:36