• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Создать файл для результатов работы программы

  • Автор темы Автор темы Yug7
  • Дата начала Дата начала

Yug7

Новые
Регистрация
25 Июл 2011
Сообщения
33
Реакции
0
Баллы
0
Создать файл для результатов работы программы

Для записи результатов работы программы необходимо создать файл. В ходе работы программа будет постоянно обращаться к этому файлу : брать КОПИЮ последней записи в файл ( сохраняя саму запись,иначе чего весь сыр-бор городить ), проделывать с этой КОПИЕЙ арифметические операции и записывать полученное число в хвост записи, т.е. файл будет постоянно пополняемый ( и еще нужно,чтобы после каждой новой записи-он должен быть постоянно сохраняемый). Файл создается с одним числом - 5 ( № 1 ).
Как наиболее правильно сформулировать такую задачу программе и где это записать : до или после объявления переменных ?
 
Язык программирования, естественно, у вас из разряда "сами знаете какой"?

Исходя из раздела, могу в общих чертах назвать команды для работы с файлами:
assign(f,'путь к файлу.расширение') - связать файловую текстовую переменную с файлом, имеющим адрес.
reset(f) - открыть файл по чтению, понадобится при поиске последней строки в файле путем перебора.
append(f) - открыть файл для добавления информации в конец файла.
read(f, t) - считать из файла значение в переменную t.
write(f,t) - записать в файл значение переменной t.

Более подробно и детально можно будет вести диалог в случае не столь туманного описания задачи.
 
Язык программирования, естественно, у вас из разряда "сами знаете какой"?
Да уж...
Yug7 И еще - какой тип файла? Что представляет собой каждая запись (текст, число, строка, переменная типа "запись")?
К сожалению, наши штатные экстрасенсы убыли в отпуск, а нам без них про всё это не догадаться...
 
Создать файл для результатов работы программы

:tehnari_ru_117: Море извинений за бестолково заданный вопрос. Уточняю : 1) Язык - Turbo Pascal.
2) " Запись" - число.
 
:tehnari_ru_117: А еще я наврал в вопросе с числом под № 1 - это не 5,а 3.
 
:tehnari_ru_117: И еще. Спасибо за участие.
 
Файл типизированный или нетипизированный?

Насколько я понял, в исходном файле должно быть только одно число в начале выполнения программы и в процессе выполнения программы в него записывается ряд чисел, полученных в результате неких арифметических действий. Я вас правильно понял?

Работа с текстовым файлом вас устроит?
 
Допустим, что все числа в файле записываются с новой строки и сам файл должен носить имя c:\results.txt и первоначально не создан.
Код:
var f:text;
a:integer;
begin
assign(f, 'c:\results.txt');
rewrite(f); // открываем файл по перезаписи
write(f,'3');  // записываем первое число 3 в файл
close(f);
reset(f)  // открываем файл по чтению и в цикле считываем числа
while not (eof(f)) do
readln(f, a);
close(f);
// здесь ваши арифметические операции над считанным числом 
...
append(f);
writeln(f,''); write(f, a);
close(f);
end.
Дальше будем думать вместе, когда вы удосужитесь выложить все техзадание для реализации программы :)
 
Приведенную программу можно зациклить на выполнение вычислений до наступления события, например, до нажатия на кнопку Esc для выхода. Сделать это можно, добавив цикл с условием, используя команды перехвата нажатия клавиш.
 
AlexZir ! Вы соверщенно правы: и изложил туманно и как верно сказано "...не удосужился выложить все техзадание для реализации программы."
Исправляюсь. Но, боюсь,что будет еще запутанней. Я хочу написать программу, генерирующую прогрессию таким образом : сначала объявить ДВЕ переменные : а ( непрерывно циклически принимает значения "0" или "1",цикл такой : =0,=1,=0,=1,=0 ...) , b ( непрерывно циклически принимает значения "1" или "0",цикл такой : =1,=0,=0,=1,=0,=0,=1 ...).
1. for i:=1 to n do
2. if i mod 3=1 then write(1) else write(0);
Так можно ? Или лучше взять a и b, как тип Boolean ?
А алгоритм работы такой : программа сравнивает первые значения переменных и если хоть одна переменная =1,программа переходит к оценке вторых значения переменных,а на счетчик идет k+1,так до тех пор,пока а=0 и b=0. Тогда из файла берется КОПИЯ последнего туда записанного числа, к нему +счетчик (после чего он обнуляется) и полученное записывается в файл. Затем вводится еще одна переменная того же типа,но со своим циклом. Для вычисления цикла из файла берется КОПИЯ последней записи(то,что вычислили) и от нее вычитается 1. Это и будет количество нулей между единицами в цикле. Цикл новой переменной начинается с 1, остальные переменные начинают оттуда,где остановились : а=0, b=0, c=1. Дальше алгоритмы повторяются. Количество переменных растет, в файл записываются все новые и новые члены прогрессии.
Еще больше тумана напустил ?
 
Он ушел в отпуск, так что я вместо него.
А алгоритм работы такой : программа сравнивает первые значения переменных и если хоть одна переменная =1,программа переходит к оценке вторых значения переменных,а на счетчик идет k+1,так до тех пор,пока а=0 и b=0. Тогда из файла берется КОПИЯ последнего туда записанного числа, к нему +счетчик (после чего он обнуляется) и полученное записывается в файл.
Можно, конечно, "достать правое ухо через-под левое колено", вот только зачем? Ведь генерируемая последовательность - это ничто иное, как просто номера, при которых а=0 и b=0. Почему бы так и не построить алгоритм? К чему этот обнуляемый счетчик? Но, впрочем, как хотите.
Затем вводится еще одна переменная того же типа,но со своим циклом. Для вычисления цикла из файла берется КОПИЯ последней записи(то,что вычислили) и от нее вычитается 1.
Поскольку не сказано, где, как и в каком виде хранится эта самая с (представляющая собой ни что иное, как полученную последовательность минус 1, так что смысла в ней тоже не чрезмерно), в программе она (эта с) пишется в свой файл.
Итого:
Код:
CONST
 N=1000;
VAR
 f1,f2:TEXT;
 i,k,d:Integer;

Function a(Ia:Integer):Integer;
begin
 If (Ia mod 2)=0 then a:=1 else a:=0;
end;

Function b(Ib:Integer):Integer;
begin
 If (Ib mod 3)=1 then b:=1 else b:=0;
end;


BEGIN
 Assign(f1,'D:\f1.dat');
 ReWrite(f1);
 Writeln(f1,'3');
 Close(f1);
 Assign(f2,'D:\f2.dat');
 ReWrite(f2);
 Writeln(f2,'1');
 Close(f2);
 i:=3;
 REPEAT
  k:=0;
  Repeat
   Inc(i);
   Inc(k);
  Until ((a(i)=0) and (b(i)=0)) or (i=N);
  If i<N then
   begin
    ReSet(f1);
    repeat
     Readln(f1,d);
    until EoF(f1);
    Close(f1);
    d:=d+k;
    Append(f1);
    Writeln(f1,d);
    Close(f1);
    k:=0;
    Append(f2);
    Writeln(f2,d-1);
    Close(f2);
   end;
 UNTIL i=N;
END.
 
Что-то мой пессимизм говорит,что объявить переменные такого типа не получится ( этож какая-то программа-в-программе получается), я уж не говорю о введении все новых и новых переменных ?
 
Добрый вечер Vladimir_S ! У меня поисковик чудит : только сейчас прочитал Ваше сообщение. Спасибо громаднейшее ! Из меня весь пессимизм испарился. Весь-в работу. Как получится-обязательно напишу. Быстро не гарантирую : я в программировании с "0". А вот алгоритм этот, где "смешались и количество окон и ФИО декана" , почти год сооружал.
 
CONST
N=1000;
Это размер файла ? Или конец прогрессии ?
 
CONST
N=1000;
Это размер файла ? Или конец прогрессии ?
Да просто количество обрабатываемых членов Ваших последовательностей (от 1 до N). Можете изменить константу - я взял "с потолка".
 
Доброго времени суток и доброго здоровья (остальное приложится).
Дальше компиляции дело не идет. Перепробовал все,что под руку попадалось : Borland Pascal 7.0, Turbo Pascal 7.0, Free Pascal, Pascal ABC.
Запустить программу не получается.
Может я - "особо тупой" ?
 
Доброго времени суток и доброго здоровья (остальное приложится).
Дальше компиляции дело не идет. Перепробовал все,что под руку попадалось : Borland Pascal 7.0, Turbo Pascal 7.0, Free Pascal, Pascal ABC.
Запустить программу не получается.
Может я - "особо тупой" ?
Возможно, это происходит потому, что в программе прописаны пути к создаваемым файлам такие:
Assign(f1,'D:\f1.dat');
...
Assign(f2,'D:\f2.dat');
...
т.е. файлы создаются на диске D, которого у Вас может не быть. Так мне было удобнее. Поправьте, исходя из своей архитектуры, например, заменив D на C.
 
Turbo Pascal 7.1 : при компиляции (Alt+F9) ответ - Error 3 : Unknown identifier. Что не так ?
 
Turbo Pascal 7.1 : при компиляции (Alt+F9) ответ - Error 3 : Unknown identifier. Что не так ?
Но при этом, я полагаю, маркер на кого-то указывает? Какой именно идентификатор он считает неизвестным? Вообще-то, как я уже неоднократно писал, я НЕ выкладываю неотлаженных программ. Естественно, и эта была должным образом оттестирована. А потому еще раз - нужна максимально подробная информация. Скриншот, наконец, сделайте! А то так гадать - бессмысленно.
 
Мигает в этой строке :
If (Ib mod 3)=1 then b:=1 else b:=0;
Я неправильно ввел : вместо "b" - "d" . Исправил.
Теперь мигает между Ib и mod 3.
Но надпись Error 3 : Unknown identifier исчезла.
Запускаться программа не хочет
 
Назад
Сверху