Записать в файл F2 информацию о всех кругах файла F1, целиком лежащих в максимальном найденном круге - PascalABC.NET
Формулировка задачи:
Создать файл F1, содержащий записи о параметрах заданного числа кругов. Каждая запись файла должна включать случайные координаты центра из интервала [0.0,10.1] и случайный радиус из [0.0,5.0], полученные Random. Записать в файл F2 информацию о всех кругах файла F1, целиком лежащих в максимальном найденном круге.
Решение задачи: «Записать в файл F2 информацию о всех кругах файла F1, целиком лежащих в максимальном найденном круге»
textual
Листинг программы
program practice; type krug=record x,y,r:real; end; var f1,f2: file of krug; z,zmx:krug; n,i,imx,k: integer; mx:real; begin randomize; assign (f1, 'input'); rewrite(f1); write('Введите число кругов:'); readln(N); for i := 1 to N do begin z.x:=10.1*random; z.y:=10.1*random; z.r:=5*random; write(f1,z) end; writeln('Содержание файла F1'); seek(f1,0); mx:=0; while not eof(f1) do begin read(f1,z); write('(',z.x:5:2,',',z.y:5:2,',',z.r:5:2,') '); if pi*sqr(z.r)>mx then begin mx:=pi*sqr(z.r); zmx:=z end; end; writeln; writeln('Самый большой круг (',zmx.x:5:2,',',zmx.y:5:2,',',zmx.r:5:2,') его площадь=',mx:0:2); assign(f2,'output'); rewrite(f2); seek(f1,0); k:=0; while not eof(f1) do begin read(f1,z); if sqrt(sqr(z.x-zmx.x)+sqr(z.y-zmx.y))<zmx.r-z.r then begin k:=1; write(f2,z); end; end; close(f1); if k=0 then write('Нет кругов, полностью лежащих в самом большом круге') else begin writeln('Содержание файла F2'); seek(f2,0); while not eof(f2) do begin read(f2,z); write('(',z.x:5:2,',',z.y:5:2,',',z.r:5:2,') '); end; end; close(f2) end.
Объяснение кода листинга программы
- Создаются две переменные типа
krug
- z и zmx, а также переменные n, i, imx, k, mx типа integer и файловые переменные f1 и f2. - В цикле вводятся и записываются в файл F1 круги до тех пор, пока не будет введено указанное количество кругов.
- Выводится информация о содержимом файла F1.
- Находится максимальный круг по площади, его координаты сохраняются в переменной zmx.
- Файл F2 открывается для записи.
- В цикле читаются круги из файла F1 и проверяется условие на полное попадание в максимальный круг. Если условие выполняется, круг записывается в файл F2 и счетчик k увеличивается на единицу.
- Если в файле F2 нет кругов, выводится сообщение об отсутствии кругов, полностью лежащих в самом большом круге.
- В противном случае выводится информация о содержимом файла F2.
- Файлы F1 и F2 закрываются.