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


Ответ
 
Опции темы Опции просмотра
Старый 05.04.2014, 23:01   #1 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Турбо Паскаль. Файлы, работа с текстом

нужна помощь. требуется переделать программу, представленную ниже, под работу с файлами. то есть считывание из файла координат х, у и запись в файл полярного угла и радиуса
код программы:
Uses crt;
Type
Cartez=Record
x,y:real;
end;
Polar=Record
R,fi:real;
end;
Procedure Cart2Pol(Cr:Cartez; var Pl:Polar);
begin
Pl.R:=sqrt(sqr(Cr.x)+sqr(Cr.y));
with Cr do
if (x>0) and (y>=0) then Pl.fi:=Arctan(y/x) else
if (x=0) and (y>0) then Pl.fi:=Pi/2 else
if (x<0) and (y>=0) then Pl.fi:=Pi+Arctan(y/x) else
if (x<0) and (y<0) then Pl.fi:=-Pi+Arctan(y/x) else
if (x=0) and (y<0) then Pl.fi:=-Pi/2 else
if (x>0) and (y<0) then Pl.fi:=Arctan(y/x) else
Pl.fi:=10;
end;

{VVOD PEREMENNOY}
procedure vvod(var a:real); {A - PARAMETR-PEREMENNAYA DLYA HRANENIYA VVEDENNOGO ZNACHENIYA}
var ST:string; {ST - STROKA DLYA NEPOSREDSTVENNOGO VVODA}
E:integer; {E - PEREMENNAYA DLYA HRANENIYA KODOV OSHIBOK}
begin
repeat
readln(ST);
val(ST,A,E);
if E<>0 then begin
writeln('Necorrectnoe znachenie ''',ST,'''. Povtorite vvod:')
end
until E=0;
end;
Var
C:Cartez;
P:Polar;
Begin
clrscr;
writeln ('Programma perevodit koordinati tochki is dekartovoi sistemi v poliarnuy');
with C do begin
writeln('Vvedite x:');
vvod(x);
writeln('Vvedite y:');
vvod(y)
end;
Cart2Pol(C,P);
Writeln ('Polyarnie koordinati:');
Writeln('Radius = ',P.R:0:2);
if P.fi=10 then
Writeln('Poliarnii ugol - Ne opredelen')
else
Writeln('Poliarnii ugol = ',P.fi{/Pi*180}:0:2);
Readln
End.
Заранее спасибо
Светик123 вне форума   Ответить с цитированием

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

Пока в вашей теме нет ответов можете заняться прочтением схожих тем

Турбо Паскаль. Файлы, работа с текстом
Турбо Паскаль. Тип запись
Турбо Паскаль. Рекурсии
Программа в Турбо-Паскаль 7,0
Два примера через турбо-Паскаль
Турбо Паскаль

Старый 06.04.2014, 08:19   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Светик123 Посмотреть сообщение
требуется переделать программу, представленную ниже, под работу с файлами.
Это-то можно, только объясните сначала, зачем Вы сделали ввод чисел через преобразование строковой переменной? Это как у классиков: "достать правое ухо через-под левое колено".
Vladimir_S вне форума   Ответить с цитированием
Старый 06.04.2014, 21:05   #3 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Цитата:
Сообщение от Светик123 Посмотреть сообщение
это сделано для того, чтобы пользователь но смог символ ввести. требования такие, тут от меня ничего, к сожалению, не зависит(
Понятно. Ну что же, можно и так.
Вот с файлами. Естественно, имена файлов, а также пути к ним можете поправить сообразно своему вкусу.
Код:
Type
 Cartez=Record
         x,y:real;
        end;
  Polar=Record
         R,fi:real;
        end;

Procedure Cart2Pol(Cr:Cartez; var Pl:Polar);
begin
 Pl.R:=sqrt(sqr(Cr.x)+sqr(Cr.y));
 with Cr do
  if (x>0) and (y>=0) then Pl.fi:=Arctan(y/x) else
  if (x=0) and (y>0) then Pl.fi:=Pi/2 else
  if (x<0) and (y>=0) then Pl.fi:=Pi+Arctan(y/x) else
  if (x<0) and (y<0) then Pl.fi:=-Pi+Arctan(y/x) else
  if (x=0) and (y<0) then Pl.fi:=-Pi/2 else
  if (x>0) and (y<0) then Pl.fi:=Arctan(y/x) else
  Pl.fi:=10;
end;

Var
 C:Cartez;
 P:Polar;
 f1,f2:Text;
 IOR:Integer;

Begin
 {$I-}
 Assign(f1,'D:\Cart.txt');
 Reset(f1);
 Assign(f2,'D:\Polar.txt');
 Rewrite(f2);
 Read(f1,C.x,C.y);
 IOR:=IOResult;
 If IOR=0 then
  begin
   Cart2Pol(C,P);
   Writeln(f2,'Radius = ',P.R:0:2);
   if P.fi=10 then Writeln(f2,'Poliarnii ugol - Ne opredelen')
   else Writeln(f2,'Poliarnii ugol = ',P.fi:0:2);
  end
 else
  begin
   writeln('Oshibka chtenija vhodnyh dannyh');
   Readln
  end;
 Close(f1);
 Close(f2);
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.04.2014, 20:59   #5 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо большое)
Светик123 вне форума   Ответить с цитированием
Ads

Яндекс

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

Метки
турбо паскаль


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

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




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

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