Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 13.10.2013, 00:57   #1 (permalink)
borntank
Member
 
Регистрация: 26.04.2013
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию В типизированный файл F с помощью генератора случайных чисел

В типизированный файл F с помощью генератора случайных чисел записать 1000 целых чисел из диапазона от – 50 до +50, затем из файла F скопировать в файл G все нечетные числа.
Pascal ABC
borntank вне форума   Ответить с цитированием

Старый 13.10.2013, 00:57
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Очень часто пользователям помогают схожие топики

Паскаль. Задача на типизированный файл
Генератор случайных чисел
Pascal ABC: File23. Дан файл вещественных чисел, создать файл целых чисел

Старый 13.10.2013, 05:37   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Алгоритм:
В разделе переменных:
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. Закрываете оба файла.
По окончании работы программы можете просмотреть содержимое полученных файлов, к примеру, через Блокнот.
AlexZir вне форума   Ответить с цитированием
Старый 14.10.2013, 08:39   #3 (permalink)
borntank
Member
 
Регистрация: 26.04.2013
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо конечно за алгоритм, но, к сожалению, не могу понять задачи связанные с файлами.
borntank вне форума   Ответить с цитированием
Старый 14.10.2013, 10:25   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от borntank Посмотреть сообщение
Спасибо конечно за алгоритм, но, к сожалению, не могу понять задачи связанные с файлами.
Ну что же - давайте разбираться. И, заодно, учиться.
Цитата:
В разделе переменных:
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.
Теперь осталось только состыковать фрагменты листинга. Это я предоставляю Вам.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.10.2013, 16:36   #5 (permalink)
borntank
Member
 
Регистрация: 26.04.2013
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Вот тут - внимание! Это так, но ТОЛЬКО если тип файлов - текстовый (Text). Если же, как в данном случае, объявлен числовой формат файлов, то всё, что Вы увидите, открыв их Блокнотом - это цепочку крякозябров. Ибо информация закодирована. Поэтому я вставил чтение и вывод на экран нечетных чисел, содержащихся в файле G, для чего мне и понадобился счетчик P:
Спасибо большое,но можно чтоб в блокноте выводились нужные числа (в файле G были нечетные числа,а F все числа)?
borntank вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 20.10.2013, 17:32   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Цитата:
Сообщение от borntank Посмотреть сообщение
В типизированный файл F
Цитата:
Сообщение от borntank Посмотреть сообщение
но можно чтоб в блокноте выводились нужные числа
Ваше желание противоречит поставленной задаче, вам же уже выше писали
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Если же, как в данном случае, объявлен числовой формат файлов, то всё, что Вы увидите, открыв их Блокнотом - это цепочку крякозябров. Ибо информация закодирована.
Впрочем, можно попытаться просмотреть содержимое файла, к примеру, через FAR Manager, но, к сожалению, никто не гарантирует, что вы получите желаемое.
AlexZir вне форума   Ответить с цитированием
Старый 20.10.2013, 17:44   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от borntank Посмотреть сообщение
Спасибо большое,но можно чтоб в блокноте выводились нужные числа (в файле 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.10.2013, 00:40   #8 (permalink)
borntank
Member
 
Регистрация: 26.04.2013
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А можно чтоб паскаль выводил ответ,а то он выводит значения только файла 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.
borntank вне форума   Ответить с цитированием
Старый 30.10.2013, 18:22   #9 (permalink)
borntank
Member
 
Регистрация: 26.04.2013
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ой извините,там все правильно)
Спасибо еще раз.
borntank вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:27.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.