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

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

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

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

В типизированный файл F с помощью генератора случайных чисел

borntank

Новые
Регистрация
26 Апр 2013
Сообщения
15
Реакции
0
Баллы
0
В типизированный файл F с помощью генератора случайных чисел

В типизированный файл F с помощью генератора случайных чисел записать 1000 целых чисел из диапазона от – 50 до +50, затем из файла F скопировать в файл G все нечетные числа.
Pascal ABC
 
Алгоритм:
В разделе переменных:
1. Определяете переменные для типизированных файлов и для циклов.
В программе
2. Ассоциируете файловые переменные с путями к файлам.
3. Открываете файл F по перезаписи командой rewrite(f).
4. Инициализируете генератор псевдослучайных чисел командой randomize.
5. В цикле записываете в файл 1000 случайных чисел из указанного диапазона. Получить их можно, к примеру, командой round(random*101)-50.
6. Переоткрываете файл F по чтению командой reset(f), а файл G - по перезаписи командой rewrite(G).
7. В цикле считываете число из F, анализируете его на делимость на 2, если не делится - записываете в файл G.
8. Закрываете оба файла.
По окончании работы программы можете просмотреть содержимое полученных файлов, к примеру, через Блокнот.
 
Спасибо конечно за алгоритм, но, к сожалению, не могу понять задачи связанные с файлами.
 
Спасибо конечно за алгоритм, но, к сожалению, не могу понять задачи связанные с файлами.
Ну что же - давайте разбираться. И, заодно, учиться.
В разделе переменных:
1. Определяете переменные для типизированных файлов и для циклов.
Код:
Var
 F,G:File of Integer;
 i,N,P:Integer;
Здесь добавлена еще переменная P - счетчик нечетных чисел.
Код:
Begin
2. Ассоциируете файловые переменные с путями к файлам.
Код:
Assign(F,'D:\First');
Assign(G,'D:\Second');
Здесь файлы с именами "First" и "Second" располагаются на диске D. Естественно, имена файлов и пути к ним Вы можете изменить на свой вкус.
3. Открываете файл F по перезаписи командой rewrite(f).
Код:
ReWrite(F);
4. Инициализируете генератор псевдослучайных чисел командой randomize.
Код:
Randomize;
5. В цикле записываете в файл 1000 случайных чисел из указанного диапазона. Получить их можно, к примеру, командой round(random*101)-50.
Код:
For i:=1 to 1000 do
  begin
   N:=-50+Random(101);
   Write(F,N);
  end;
 Close(F);
Здесь - одно замечание. Конечно, генерацию чисел можно организовать и так, как предлагает AlexZir, но мне представляется этот переход от вещественного к целочисленному формату излишним и перегружающим программу. Поэтому я предлагаю более простой и прямой вариант.
6. Переоткрываете файл F по чтению командой reset(f), а файл G - по перезаписи командой rewrite(G).
Код:
 ReSet(F);
 ReWrite(G);
7. В цикле считываете число из F, анализируете его на делимость на 2, если не делится - записываете в файл G.
Код:
 P:=0;
 For i:=1 to 1000 do
  begin
   Read(F,N);
   If (N mod 2)<>0 then
    begin
     Write(G,N);
     P:=P+1;
    end;
  end;
Добавлен подсчет количества нечетных чисел.
8. Закрываете оба файла.
Код:
 Close(F);
 Close(G);
По окончании работы программы можете просмотреть содержимое полученных файлов, к примеру, через Блокнот.
Вот тут - внимание! Это так, но ТОЛЬКО если тип файлов - текстовый (Text). Если же, как в данном случае, объявлен числовой формат файлов, то всё, что Вы увидите, открыв их Блокнотом - это цепочку крякозябров. Ибо информация закодирована. Поэтому я вставил чтение и вывод на экран нечетных чисел, содержащихся в файле G, для чего мне и понадобился счетчик P:
Код:
 ReSet(G);
 For i:=1 to P do
  begin
   Read(G,N);
   Write(N:4);
  end;
Ну и заканчиваем программу. Оператор Readln поставлен для того, чтобы приостановить работу и посмотреть на результат. Возможно, в АВС он не нужен - не знаю.
Код:
 Readln
End.
Теперь осталось только состыковать фрагменты листинга. Это я предоставляю Вам.
 
Вот тут - внимание! Это так, но ТОЛЬКО если тип файлов - текстовый (Text). Если же, как в данном случае, объявлен числовой формат файлов, то всё, что Вы увидите, открыв их Блокнотом - это цепочку крякозябров. Ибо информация закодирована. Поэтому я вставил чтение и вывод на экран нечетных чисел, содержащихся в файле G, для чего мне и понадобился счетчик P:
Спасибо большое,но можно чтоб в блокноте выводились нужные числа (в файле G были нечетные числа,а F все числа)?
 
В типизированный файл F
но можно чтоб в блокноте выводились нужные числа
Ваше желание противоречит поставленной задаче, вам же уже выше писали
Если же, как в данном случае, объявлен числовой формат файлов, то всё, что Вы увидите, открыв их Блокнотом - это цепочку крякозябров. Ибо информация закодирована.
Впрочем, можно попытаться просмотреть содержимое файла, к примеру, через FAR Manager, но, к сожалению, никто не гарантирует, что вы получите желаемое.
 
Спасибо большое,но можно чтоб в блокноте выводились нужные числа (в файле G были нечетные числа,а F все числа)?
Как указывалось выше (и мною, и AlexZir), это возможно только при текстовом типе файлов. Если таковой допустим, то так:
Код:
Var
 F,G:Text;
 i,N:Integer;


Begin
 Assign(F,'D:\First');
 Assign(G,'D:\Second');
 ReWrite(F);
 Randomize;
 For i:=1 to 1000 do
  begin
   N:=-50+Random(101);
   Write(F,N:4);
  end;
 Close(F);

 ReSet(F);
 ReWrite(G);

 For i:=1 to 1000 do
  begin
   Read(F,N);
   If (N mod 2)<>0 then Write(G,N:4);
  end;

 Close(F);
 Close(G);

End.
 
А можно чтоб паскаль выводил ответ,а то он выводит значения только файла F?
HTML:
uses crt;
Var
 F,G:File of Integer;
 i,N,P:Integer;
Begin
clrscr;
 Assign(F,'D:\First');
 Assign(G,'D:\Second');
 ReWrite(F);
 Randomize;
For i:=1 to 1000 do
  begin
   N:=-50+Random(101);
   Write(F,N);
  end;
 Close(F);
  ReSet(F);
 ReWrite(G);
  P:=0;
 For i:=1 to 1000 do
  begin
   Read(F,N);
   If (N mod 2)<>0 then
    begin
     Write(G,N);
     P:=P+1;
    end;
  end;
 Close(F);
 Close(G);
  ReSet(G);
 For i:=1 to P do
  begin
   Read(G,N);
   Write(N:4);
  end;
   Readln
End.
 
Ой извините,там все правильно)
Спасибо еще раз.
 
Назад
Сверху